目录

  • 1、什么是Mybatis-plus-join?
  • 2、下载Mybatis-plus-join
  • 3、离线版请使用Maven将其打包成jar包
    • 3.1、使用idea打包
  • 4.项目中引用Mybatis-plus-join的pom.xml配置
  • 5、在业务中使用mybatis-plus-join的准备
    • 使用
  • 核心类 MPJLambdaWrapper和MPJQueryWrapper
    • MPJLambdaWrapper用法
      • MPJLambdaWrapper示例
      • 简单的3表查询
      • 分页查询
    • MPJQueryWrapper
      • 简单的3表查询
      • 分页查询
      • 还可以这么操作,但不建议
  • 6、mybatis-plus-join更多使用方法请参看Gitee

1、什么是Mybatis-plus-join?

  1. 对Mybatis-plus进行功能升级 ,提高开发效率;
  2. 使用方法与Mybatis-plus一样 ,学习成本低;
  3. 增加了 多表连接查询 功能,摆脱xml模式多表连接;

2、下载Mybatis-plus-join

Mybatis-plus-join目前(2021-05-08)发布在Gitee上,直接将其克隆/下载到本地即可:

下载地址: Mybatis-plus-join源码地址.

注意:需要 Mybatis-plus version >= 3.4.0

下载结果如图:

3、离线版请使用Maven将其打包成jar包

3.1、使用idea打包

1.按照下图进行打包操作

2.打包成功后,jar包存在的目录,找到jar包并复制到自己的项目中:

3.将打出来的jar包引入工程模块中,步骤如图(如果跳出版本问题,则点击更新即可):

4.项目中引用Mybatis-plus-join的pom.xml配置

在pom.xml中引入该依赖:

 <!--mybatis-plus-join--><dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.1.6</version></dependency>
123456

引入效果(检查时提示更新就更新部分环境即可)

5、在业务中使用mybatis-plus-join的准备

使用

  • mapper继承MPJBaseMapper (必选)
  • service继承MPJBaseService (可选)
  • serviceImpl继承MPJBaseServiceImpl (可选)
  1. MPJBaseMapper继承BaseMapper,在原有的方法基础上又添加了以下方法:

    • selectJoinOne 连表查询一条记录对象
    • selectJoinList 连表查询返回命中记录对象集合
    • selectJoinPage 连表分页查询对象集合
    • selectJoinMap 连表查询一条记录返回Map
    • selectJoinMaps 连表查询返回命中记录Map集合
    • selectJoinMapsPage 连表分页查询返回Map集合
  2. MPJBaseService 继承了IService,同样添加以上方法
  3. MPJBaseServiceImpl 继承了ServiceImpl,同样添加了以上方法

核心类 MPJLambdaWrapper和MPJQueryWrapper

MPJLambdaWrapper用法

MPJLambdaWrapper示例

简单的3表查询

class test {@Resourceprivate UserMapper userMapper;void testJoin() {List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,new MPJLambdaWrapper<UserDO>().selectAll(UserDO.class).select(UserAddressDO::getTel).selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress).select(AreaDO::getProvince, AreaDO::getCity).leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId).leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId).eq(UserDO::getId, 1).like(UserAddressDO::getTel, "1").gt(UserDO::getId, 5));}
}

对应sql

SELECT t.id,t.name,t.sex,t.head_img,t1.tel,t1.address AS userAddress,t2.province,t2.city
FROM user t LEFT JOIN user_address t1 ON t1.user_id = t.id LEFT JOIN area t2 ON t2.id = t1.area_id
WHERE (t.id = ? AND t1.tel LIKE ? AND t.id > ?)

说明:

  • UserDTO.class 查询结果返回类(resultType)
  • selectAll() 查询指定实体类的全部字段
  • select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段
    故将UserAddressDO和AreaDO分开为两个select()
  • selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用
  • leftJoin() 参数说明
    第一个参数: 参与连表的实体类class
    第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性
    第三个参数: 参与连表的ON的另一个实体类属性
  • 默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…
  • 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险

分页查询

class test {@Resourceprivate UserMapper userMapper;void testJoin() {IPage<UserDTO> iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class,new MPJLambdaWrapper<UserDO>().selectAll(UserDO.class).select(UserAddressDO::getTel).selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress).select(AreaDO::getProvince, AreaDO::getCity).leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId).leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId));}
}

对应sql

SELECT t.id,t.name,t.sex,t.head_img,t1.tel,t1.address AS userAddress,t2.province,t2.city
FROM user tLEFT JOIN user_address t1 ON t1.user_id = t.idLEFT JOIN area t2 ON t2.id = t1.area_id
LIMIT ?,?

MPJQueryWrapper

简单的3表查询

class test {@Resourceprivate UserMapper userMapper;void testJoin() {List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,new MPJQueryWrapper<UserDO>().selectAll(UserDO.class).select("addr.tel", "addr.address", "a.province").leftJoin("user_address addr on t.id = addr.user_id").rightJoin("area a on addr.area_id = a.id").like("addr.tel", "1").le("a.province", "1"));}
}

对应sql

SELECT t.id,t.name,t.sex,t.head_img,addr.tel,addr.address,a.province
FROM user tLEFT JOIN user_address addr on t.id = addr.user_idRIGHT JOIN area a on addr.area_id = a.id
WHERE (addr.tel LIKE ?AND a.province <= ?)

说明:

  • UserDTO.class 查询结果类(resultType)
  • selectAll(UserDO.class) 查询主表全部字段(主表实体类)默认主表别名 “t”
  • select() mp的select策略是覆盖,以最后一次为准,这里的策略是追加,可以一直select
    主表字段可以用lambda,会自动添加表别名,主表别名默认是 t ,非主表字段必须带别名查询
  • leftJoin() rightJoin() innerJoin() 传sql片段 格式 (表 + 别名 + 关联条件)
  • 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险

分页查询

class test {@Resourceprivate UserMapper userMapper;void testJoin() {IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class,new MPJQueryWrapper<UserDO>().selectAll(UserDO.class).select("addr.tel", "addr.address").select("a.province").leftJoin("user_address addr on t.id = addr.user_id").rightJoin("area a on addr.area_id = a.id"));}
}

对应sql

SELECT t.id,t.name,t.sex,t.head_img,addr.tel,addr.address,a.province
FROM user tLEFT JOIN user_address addr on t.id = addr.user_idRIGHT JOIN area a on addr.area_id = a.id
LIMIT ?,?

还可以这么操作,但不建议

class test {@Resourceprivate UserMapper userMapper;void testJoin() {List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,new MPJQueryWrapper<UserDO>().selectAll(UserDO.class).select("addr.tel", "addr.address")//行列转换.select("CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex")//求和函数.select("sum(a.province) AS province")//自定义数据集.leftJoin("(select * from user_address) addr on t.id = addr.user_id").rightJoin("area a on addr.area_id = a.id").like("addr.tel", "1").le("a.province", "1").orderByDesc("addr.id"));}
}

对应sql

SELECT t.id,t.name,t.sex,t.head_img,addr.tel,addr.address,CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex,sum(a.province) AS province
FROM user tLEFT JOIN (select * from user_address) addr on t.id = addr.user_idRIGHT JOIN area a on addr.area_id = a.id
WHERE (addr.tel LIKE ?AND a.province <= ?)
ORDER BYaddr.id DESC

6、mybatis-plus-join更多使用方法请参看Gitee

链接: mybatis-plus-join更多使用方法.

MybatisPlus联合查询相关推荐

  1. MyBatisPlus + Oracle 联合查询排序问题整理,2021 年最后一篇

    背景 2021 年说话间就要过期了,今年干的几件事情有: 年初调研了三个任务调度框架. 4 月到 9 月参与了一个产品的开发,SpringCloud + React ,基本掌握了微服务的知识,也熟悉了 ...

  2. java 联合查询取值_mybatisPlus多表联合查询

    包邮abaqus分析用户卷基础知识手册 131.97元 (需用券) 去购买 > //实体类package com.sk.skkill.entity; import com.baomidou.my ...

  3. java四表联合查询_mybatis Plus 多表联合查询

    //实体类package com.sk.skkill.entity; import com.baomidou.mybatisplus.annotation.TableField; import com ...

  4. Jeecg-多表联合查询

    需求 Jeecg提供的生成工具满足了最普遍的代码功能,也将代码最简化,但在业务处理中常出现多表联合查询的需求,比如两表条件联合查询,而mybatis-plus框架使用的QueryWrapper显然无法 ...

  5. jeecgboot多表联合查询

    在数据大屏中需要多表联合查询的业务处理,而Jeecgboot提供的生成工具只能满足最普遍的简单代码,mybatis-plus框架使用的QueryWrapper显然无法满足多表联合查询,需要重写API接 ...

  6. oracle主从关系表查询,Oracle 主从表联合查询解决方法

    Oracle 主从表联合查询 表A id   type   name 1    E      AA 2    F 表B id   Aid    name 1    2      BB 2    2   ...

  7. ormlite 多表联合查询

    ormlite 多表联合查询 QueryBuilder shopBrandQueryBuilder = shopBrandDao.queryBuilder(); QueryBuilder shopQu ...

  8. iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术

    作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建.目前是百度数据工厂Pingo核心团队的技术负责人. Pingo是来自百度的离线大数据集成开发平台,使用Spark作 ...

  9. mysql联合查询查询语句_mysql 各种联合查询语句

    简单的介绍了各种联合查询语句的用法,有inner join ,join left等多表联合查询,有需要的朋友可以参考一下. INNER JOIN(等值连接) 只返回两个表中联结字段相等的行 LEFT ...

  10. MySQL中的联合查询

    联合查询 联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接. 联合查询由多条select语句构成,每条select语句获取的字段数相同,但与 ...

最新文章

  1. 随机位置显示图片不重叠前端实现详细讲解附效果图,代码可直接使用
  2. jquery easyui 动态绑定数据列
  3. linux安装java_linux中替换系统自带的OpenJDK
  4. 如何让 Timer 在特定时间点触发?
  5. WordPress窗体化侧边栏
  6. 渔翁服务器密码机的环境配置
  7. qt中设置控件不能使用
  8. c/c++ 求字符数组长度(非所占内存大小)
  9. 野生前端的数据结构基础练习(8)——图
  10. 问题六十六:怎么用ray tracing画CSG(Constructive Solid Geometry 构造实体几何)图形
  11. JAVA 下载Word文档
  12. ASP类计算机专业毕业设计题目
  13. 代码合规性:开发人员使用Helix QAC的5大原因
  14. sql 树形 子节点获取最顶级的节点
  15. 各种数据库中的dual表
  16. audio播放器进度条
  17. greedy算法策略高效求解分数背包问题
  18. 百度地图小区边界爬取
  19. PromeS unhandledRejection
  20. 水晶报表打印s删除数据

热门文章

  1. 基于STM32电压检测和电流检测
  2. Android实战简易教程五(ListView用法研究)
  3. 双目测距算法matlab模拟,基于BM算法的双目测距.pdf
  4. 如何更改Eclipse中Properties文件编码格式
  5. 五险一金 | 2020年企业社保缴费为零问题
  6. 计算机开关机命令,电脑定时关机命令取消以及开启方法介绍
  7. 电脑在指定时间关机的指令代码
  8. 深刻分析有效值与均方根
  9. React中ref的三种获取方式
  10. linux 下svn: E175002: 方法 REPORT 失败于 “/svn/GameSvn/!svn/me”: 不能读块分割符: 安全连接切断 (https://192.168.0.88)