ToB企服应用市场:ToB评测及商务社交产业平台

标题: 你还在手写 join 联表查询?MyBatis-Plus 这样写太香了! [打印本页]

作者: 滴水恩情    时间: 2023-4-4 14:33
标题: 你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
使用方法

安装

Maven
  1. <dependency>
  2.     <groupId>com.github.yulichang</groupId>
  3.     <artifactId>mybatis-plus-join</artifactId>
  4.     <version>1.2.4</version>
  5. </dependency>
复制代码
Gradle
  1. implementation 'com.github.yulichang:mybatis-plus-join:1.2.4'
复制代码
或者clone代码到本地执行 mvn install, 再引入以上依赖
注意: mybatis plus version >= 3.4.0
推荐一个开源免费的 Spring Boot 最全教程:
https://github.com/javastacks/spring-boot-best-practice
使用

核心类 MPJLambdaWrapper和MPJQueryWrapper

MPJLambdaWrapper用法

简单的三表查询
  1. class test {
  2.     @Resource
  3.     private UserMapper userMapper;
  4.     void testJoin() {
  5.         List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
  6.                 new MPJLambdaWrapper<UserDO>()
  7.                         .selectAll(UserDO.class)
  8.                         .select(UserAddressDO::getTel)
  9.                         .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)
  10.                         .select(AreaDO::getProvince, AreaDO::getCity)
  11.                         .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
  12.                         .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)
  13.                         .eq(UserDO::getId, 1)
  14.                         .like(UserAddressDO::getTel, "1")
  15.                         .gt(UserDO::getId, 5));
  16.     }
  17. }
复制代码
对应sql
  1. SELECT
  2.     t.id,
  3.     t.name,
  4.     t.sex,
  5.     t.head_img,
  6.     t1.tel,
  7.     t1.address AS userAddress,
  8.     t2.province,
  9.     t2.city
  10. FROM
  11.     user t
  12.     LEFT JOIN user_address t1 ON t1.user_id = t.id
  13.     LEFT JOIN area t2 ON t2.id = t1.area_id
  14. WHERE (
  15.     t.id = ?
  16.     AND t1.tel LIKE ?
  17.     AND t.id > ?)
复制代码
说明:
分页查询
  1. class test {
  2.     @Resource
  3.     private UserMapper userMapper;
  4.     void testJoin() {
  5.         IPage<UserDTO> iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class,
  6.                 new MPJLambdaWrapper<UserDO>()
  7.                         .selectAll(UserDO.class)
  8.                         .select(UserAddressDO::getTel)
  9.                         .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)
  10.                         .select(AreaDO::getProvince, AreaDO::getCity)
  11.                         .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
  12.                         .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId));
  13.     }
  14. }
复制代码
对应sql
  1. SELECT
  2.     t.id,
  3.     t.name,
  4.     t.sex,
  5.     t.head_img,
  6.     t1.tel,
  7.     t1.address AS userAddress,
  8.     t2.province,
  9.     t2.city
  10. FROM
  11.     user t
  12.     LEFT JOIN user_address t1 ON t1.user_id = t.id
  13.     LEFT JOIN area t2 ON t2.id = t1.area_id
  14. LIMIT ?,?
复制代码
MPJQueryWrapper

简单的3表查询
  1. class test {
  2.     @Resource
  3.     private UserMapper userMapper;
  4.     void testJoin() {
  5.         List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
  6.                 new MPJQueryWrapper<UserDO>()
  7.                         .selectAll(UserDO.class)
  8.                         .select("addr.tel", "addr.address", "a.province")
  9.                         .leftJoin("user_address addr on t.id = addr.user_id")
  10.                         .rightJoin("area a on addr.area_id = a.id")
  11.                         .like("addr.tel", "1")
  12.                         .le("a.province", "1"));
  13.     }
  14. }
复制代码
对应sql
[code]SELECT     t.id,    t.name,    t.sex,    t.head_img,    addr.tel,    addr.address,    a.provinceFROM     user t    LEFT JOIN user_address addr on t.id = addr.user_id    RIGHT JOIN area a on addr.area_id = a.idWHERE (    addr.tel LIKE ?    AND a.province




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4