赞
踩
在MyBatisPlus中,实现多表查询主要有以下几种方式:
安装:
- <dependency>
- <groupId>com.github.yulichang</groupId>
- <artifactId>mybatis-plus-join-boot-starter</artifactId>
- <version>1.4.12</version>
- </dependency>
使用:
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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。