mybatisplus三表联查
时间: 2023-09-03 19:12:15 浏览: 269
MyBatis-Plus多表联合查询并且分页(3表联合)
5星 · 资源好评率100%
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。
阅读全文