双标联查Mybatisplus中setRecords方法
时间: 2023-03-31 09:01:54 浏览: 397
setRecords 方法是 Mybatisplus 中的一个方法,用于设置查询结果集。它可以将查询结果集转换为一个 List 集合,并将其设置到当前对象中。这个方法的作用是将查询结果集转换为一个可操作的对象,方便后续的操作。
相关问题
mybatisplus中多表联查 获取多张表中的信息 如何书写xml
在 Mybatis-Plus 中进行多表联查,可以通过编写 XML 文件的方式来实现。以下是一个示例:
假设有两张表,一张是用户表(user),一张是订单表(order),它们之间存在一对多的关系,即一个用户可以对应多个订单。
1. 首先在 User 实体类中定义一个 orders 属性,表示一个用户对应的多个订单:
```
public class User {
private Long id;
private String name;
private List<Order> orders;
// getter 和 setter 略
}
public class Order {
private Long id;
private Long userId;
private String orderNo;
// getter 和 setter 略
}
```
2. 在 UserMapper.xml 中编写多表联查的 SQL:
```
<select id="selectUserWithOrders" resultMap="userMap">
SELECT u.*, o.id as order_id, o.order_no
FROM user u
LEFT JOIN order o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
</collection>
</resultMap>
```
3. 在 UserMapper 接口中定义 selectUserWithOrders 方法:
```
public interface UserMapper extends BaseMapper<User> {
User selectUserWithOrders(Long id);
}
```
4. 调用 selectUserWithOrders 方法即可获取用户及其对应的订单信息:
```
User user = userMapper.selectUserWithOrders(1L);
```
以上是一个简单的多表联查示例,具体的 SQL 语句可以根据实际情况进行调整。
mybatisplus三表联查
MybatisPlus可以使用`@Table`注解来标记实体类对应的数据表,通过`@TableField`注解来标记实体类中的属性对应的数据表字段。在进行多表联查时,可以使用MybatisPlus提供的Wrapper来构建查询条件,使用Mapper的selectList方法来进行查询。
下面是一个三表联查的示例,假设有三个数据表:user、order、order_detail,分别记录了用户、订单和订单详情的信息。需要查询一个用户的所有订单及订单详情:
```
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
// 省略其他字段和getter/setter方法
}
public class Order {
@TableId(type = IdType.AUTO)
private Long id;
private Long userId;
// 省略其他字段和getter/setter方法
}
public class OrderDetail {
@TableId(type = IdType.AUTO)
private Long id;
private Long orderId;
// 省略其他字段和getter/setter方法
}
// Mapper接口
public interface UserMapper extends BaseMapper<User> {
List<User> selectUserWithOrders(Long userId);
}
// Mapper XML文件
<select id="selectUserWithOrders" resultMap="userResultMap">
SELECT u.id, u.name, o.id as order_id, od.id as detail_id
FROM user u
LEFT JOIN order o ON u.id = o.user_id
LEFT JOIN order_detail od ON o.id = od.order_id
WHERE u.id = #{userId}
</select>
// 对应的结果映射 resultMap
<resultMap id="userResultMap" type="com.example.User">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="orders" ofType="com.example.Order">
<id property="id" column="order_id" />
<collection property="details" ofType="com.example.OrderDetail">
<id property="id" column="detail_id" />
</collection>
</collection>
</resultMap>
```
在Mapper接口中定义一个selectUserWithOrders方法,参数为用户id,返回值为包含用户和订单信息的List。在Mapper XML文件中编写对应的SQL语句,使用LEFT JOIN关键字进行三表联查,并使用resultMap进行结果映射。在结果映射中,使用collection标签来表示一对多关系,orders表示一个用户对应多个订单,details表示一个订单对应多个订单详情。
这样就可以实现一个简单的三表联查查询。需要注意的是,若关联的表中存在相同的字段名,需要使用AS关键字为其指定别名,例如上述SQL语句中的o.id as order_id和od.id as detail_id。
阅读全文