当前位置: 首页 > news >正文

MyBatis-Plus-Join联表查询

MyBatis-Plus-Join官网

1:添加依赖

<dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId><version>1.5.3</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 {@TableIdprivate Long id;private String username;private String password;private Integer age;private String email;
}

4-2:Address 实体类

@Data
@TableName("address")
public class Address {@TableIdprivate Long id;private Long userId;  // 外键,关联user.idprivate 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.id

4-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>()

相关文章:

  • C 语言学习笔记(函数)
  • 【Linux】第十九章 管理SELinux安全性
  • 【Linux驱动】Linux 按键驱动开发指南
  • 【回溯 剪支 状态压缩】# P10419 [蓝桥杯 2023 国 A] 01 游戏|普及+
  • 【第三篇】 SpringBoot项目中的属性配置
  • 动态规划(4)可视化理解:图形化思考
  • SparkSQL基本操作
  • ​在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件​
  • 嵌入式通信协议(二)——IIC总线
  • Flink Table SQL
  • Flink并行度与分区机制深度解析
  • 【c库主要功能】
  • 深入理解Java中的Minor GC、Major GC和Full GC
  • OpenHarmony 5.0状态栏息屏状态下充电然后亮屏会出现电量跳变情况
  • AI工程 新技术追踪 探讨
  • 23种设计模式考试趋势分析之——适配器(Adapter)设计模式——求三连
  • Android 自定义悬浮拖动吸附按钮
  • 【赵渝强老师】Memcached的路由算法
  • Serverless技术深度整合:从冷启动优化到边缘场景落地
  • 锂电池SOC估计EKF仿真模型
  • 私家车跑“顺风”出事故,意外险赔不赔?
  • 陕西:未来一周高温持续,继续发布冬小麦干热风风险预警
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 蒋圣龙突遭伤病出战世预赛存疑,国足生死战后防线严重减员
  • 中国青年报:为见义勇为者安排补考,体现了教育的本质目标
  • 七部门:进一步增强资本市场对于科技创新企业的支持力度