MyBatisPlus中Join联表查询的项目实践
更新时间:2026年04月02日 10:35:58 作者:小徐敲java
MyBatis-Plus本身并不直接支持JOIN连表查询,可以通过自定义SQL或者使用MyBatis的原生XML配置来实现JOIN连表查询,本文就来介绍一下MyBatisPlus中Join联表查询的项目实践,感兴趣的可以了解一下
1:添加依赖
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId>
<version>1.5.3</version>
</dependency>
<!-- 对于的mybaits-plus版本 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.9</version>
</dependency>2:原来写法的Mapper类,继承BaseMapper(其他全部不用修改)
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
2-1:修改为的继承MPJBaseMapper
@Mapper
public interface UserMapper extends MPJBaseMapper<User> {
}
3:例子
MPJLambdaWrapper<DoorControllerSettingsDoorInfoDO> doorControllerSettingsDoorInfoDOMPJLambdaWrapper = new MPJLambdaWrapper<DoorControllerSettingsDoorInfoDO>()
.selectAll()
.leftJoin(DoorControllerSettingsDO.class, DoorControllerSettingsDO::getControllerNumber, DoorControllerSettingsDO::getControllerNumber);
doorControllerSettingsMapper.selectJoinList(DoorControllerSettingsDO2.class, doorControllerSettingsDO2MPJLambdaWrapper);4:对于selectCollection和selectAssociation的使用
4-1:User 实体类
@Data
@TableName("user")
public class User {
@TableId
private Long id;
private String username;
private String password;
private Integer age;
private String email;
}
4-2:Address 实体类
@Data
@TableName("address")
public class Address {
@TableId
private Long id;
private Long userId; // 外键,关联user.id
private String province;
private String city;
private String district;
private String detail;
}
4-3:UserDTO 数据传输对象
@Data
public class UserDTO {
private Long id;
private String username;
private String password;
private Integer age;
private String email;
// 使用List接收一对多关系
private List<Address> addressList;
}
4-4:userMapper代码查询
MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
.selectAll(User.class)
//全部映射 不用考虑字段名重复问题(比如 id), 会对重复列自动添加别名
.selectCollection(Address.class, UserDTO::getAddressList)
.leftJoin(Address.class, Address::getUserId, User::getId);
List<UserDTO> dtoList= userMapper.selectJoinList(UserDTO.class, wrapper);
4-5:生成的SQL语句,基于MPJLambdaWrapper代码,MyBatis-Plus-Join会生成如下SQL:
SELECT
user.id AS user_id,
user.username AS user_username,
user.password AS user_password,
user.age AS user_age,
user.email AS user_email,
address.id AS address_id,
address.user_id AS address_user_id,
address.province AS address_province,
address.city AS address_city,
address.district AS address_district,
address.detail AS address_detail
FROM
user
LEFT JOIN
address ON address.user_id = user.id4-6:执行结果生成sql处理,MyBatis-Plus-Join会自动处理结果集,将数据映射为:
List<UserDTO> dtoList = [
{
"id": 1,
"username": "张三",
"password": "123456",
"age": 25,
"email": "zhangsan@example.com",
"addressList": [
{
"id": 1,
"userId": 1,
"province": "北京",
"city": "北京市",
"district": "海淀区",
"detail": "中关村大街1号"
},
{
"id": 2,
"userId": 1,
"province": "上海",
"city": "上海市",
"district": "浦东新区",
"detail": "张江高科技园区"
}
]
},
]注意
//使用如下方法 JoinWrappers.lambda(DoorControllerSettingsDoorInfoDO.class) //替换 new MPJLambdaWrapper<DoorControllerSettingsDoorInfoDO>() //使用如下方法 Wrappers.lambda(DoorControllerSettingsDoorInfoDO.class) //替换 new LambdaWrapper<DoorControllerSettingsDoorInfoDO>()
到此这篇关于MyBatisPlus中Join联表查询的项目实践的文章就介绍到这了,更多相关MyBatisPlus Join联表查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
SpringBoot LogbackvsLog4j2配置与性能测试对比分析
本文主要对比了SpringBoot中Logback和Log4j2的日志框架,Logback作为Log4j的继任者,性能稳定,适合大多数应用场景,而Log4j2通过异步日志记录方式,在高并发场景下性能优越,支持多种配置方式,但配置相对复杂,需要排除默认的Logback依赖2025-12-12
通过Spring Security魔幻山谷讲解获取认证机制核心原理
这篇文章主要介绍了通过Spring Security魔幻山谷讲解获取认证机制核心原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-04-04
Spring Boot中读取配置文件的5种方式汇总(最新整理)
SpringBoot提供了多种方式读取配置文件,包括@Value注解、@ConfigurationProperties、Environment接口、原生Properties/yml读取和@PropertySource加载自定义配置文件,每种方式有其适用场景和优缺点,本文介绍SpringBoot读取配置文件5种方式,感兴趣的朋友跟随小编一起看看吧2025-12-12
为什么 Java 8 中不需要 StringBuilder 拼接字符串
java8中,编辑器对“+”进行了优化,默认使用StringBuilder进行拼接,所以不用显示的使用StringBuilder了,直接用“+”就可以了。下面我们来详细了解一下2019-05-05


最新评论