当前位置:   article > 正文

MyBatisPlus实现多表查询_mybatisplus多表查询

mybatisplus多表查询

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

安装:

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

使用:

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

 

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

  1. public class User {
  2. // ...
  3. @TableField(el = "user_detail.detail_info")
  4. private String detailInfo;
  5. // ...
  6. private UserDetail userDetail;
  7. // getters and setters...
  8. }

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

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

  1. @Data
  2. public class User {
  3. // ...
  4. @OneToOne
  5. @JoinColumn(name = "detail_id", referencedColumnName = "id")
  6. private UserDetail userDetail;
  7. // getters and setters...
  8. }

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/625038
推荐阅读
相关标签
  

闽ICP备14008679号