MyBatisPlus实现多表查询

在MyBatisPlus中,实现多表查询主要有以下几种方式:

安装:

  • Maven
    <dependency>
        <groupId>com.github.yulichang</groupId>
        <artifactId>mybatis-plus-join-boot-starter</artifactId>
        <version>1.4.12</version>
    </dependency>

使用:

  • mapper继承MPJBaseMapper (必选)
  • service继承MPJBaseService (可选)
  • serviceImpl继承MPJBaseServiceImpl (可选)

 

1. 基础联查: MyBatisPlus提供了@TableField注解的el属性来支持简单的联查。例如,在一个实体类中定义另一个实体类的引用,并通过el指定关联字段。

public class User {
    // ...
    @TableField(el = "user_detail.detail_info")
    private String detailInfo;
    // ...
    private UserDetail userDetail;
    // getters and setters...
}

在Mapper接口中直接查询即可。

2. 关联查询: 使用@OneToOne, @OneToMany, @ManyToOne等注解进行一对一、一对多或多对一关联查询。

@Data
public class User {
    // ...
    @OneToOne
    @JoinColumn(name = "detail_id", referencedColumnName = "id")
    private UserDetail userDetail;
    // getters and setters...
}

然后在Service或Mapper中使用QueryWrapper或者LambdaQueryWrapper进行包含关联实体的查询。

3. 自定义SQL查询: 如果上述方式无法满足复杂的需求,可以通过编写自定义SQL语句进行多表查询。

@Select("SELECT u.*, ud.* FROM user u JOIN user_detail ud ON u.id = ud.user_id")
List<User> selectUserWithDetail();

4. 嵌套查询: 利用MyBatisPlus的subquery()方法构造嵌套查询。

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("*, (SELECT detail_info FROM user_detail WHERE user_id = id) as detail_info");
List<User> users = userMapper.selectList(wrapper);

5. 链式查询: MyBatisPlus的动态SQL功能强大,可以利用eq, like, join等方法进行链式条件构建和多表查询。

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User.class, User::getId, User::getName)
      .leftJoin(UserDetail.class, on -> on.eq(User::getId, UserDetail::getUserId))
      .select(UserDetail::getDetailInfo);
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值