官方文档:https://gitee.com/best_handsome/mybatis-plus-join/

背景
mybatis-plus 作为 mybatis 的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到 left join 或 right join 的左右连接,你还是得老老实实的打开 xml 文件,手写上一大段的 sql 语句。

依赖
pom 文件

        <!--  https://gitee.com/best_handsome/mybatis-plus-join/ --><dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join</artifactId><version>1.2.4</version><scope>provided</scope></dependency>

注意
mybatis plus version >= 3.4.0

使用

  • mapper继承MPJBaseMapper (必选)
  • service继承MPJBaseService (可选)
  • serviceImpl继承MPJBaseServiceImpl (可选)

mapper

@Repository
public interface IUserMapper extends MPJBaseMapper<UserDO> {}

联表查询

说明:

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

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 > ?)

JAVA

   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 tLEFT JOIN user_address t1 ON t1.user_id = t.idLEFT JOIN area t2 ON t2.id = t1.area_id
LIMIT ?,?

JAVA

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));
}

MyBatis Plus 联表查询相关推荐

  1. mybatis一对一联表查询的两种常见方式

    1.一条语句执行查询(代码如下图)  注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...

  2. Mybatis(第二篇:联表查询)

    Mybatis(第二篇:联表查询) 目录 Mybatis(第二篇:联表查询) 一.前期 项目的搭建 1.数据库 2.IDEA项目架构搭建 2.1 pom.xml 2.2 domain包 2.2.1 D ...

  3. mybatis联表查询且统计数据

    mybatis联表查询且统计数据 表1的数据+表2的数据的统计==>vo接收 前端原型图如下: 涉及到两张表 t_record t_user_record 详情A/B A:未签收人数 B:全部人 ...

  4. Springboot中使用Mybatis框架对数据库进行联表查询,踩坑填坑

    因为mybatis使用的基本是原生sql语句 所以首先从数据库开始说 以mysql数据库为例,对表的连接查询分为四种 内连接,外连接,交叉连接,和联合连接 内连接使用比较运算符根据每个表共有的列的值匹 ...

  5. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  6. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  7. Mybatis 实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  8. MyBatis 实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  9. 动态SQL 模糊查询 联表查询

    1. 正文 1. set标签 和 foreach标签 trim标签 sql片段 2. mybatis映射文件处理特殊字符. 3. mybatis完成模糊查询. 4. 联表查询 2. 动态sql 2.1 ...

最新文章

  1. 2018-3-21李宏毅机器学习视频笔记(十二)--Backpropagation
  2. 数字图像处理:第十三章 图象复原
  3. 犀牛导出su文件错误插件错误_安利|一款免费插件blender-for-unrealengine
  4. php imap配置,php中的自定义IMAP命令
  5. 虚拟专题:知识图谱 | 基于网络防御知识图谱的0day攻击路径预测方法
  6. 8个超好用的Python内置函数,提升效率必备
  7. web前端之html从入门到精通
  8. 浓浓中国风的雅致新年元旦PSD分层海报模板
  9. php 命名空间不能继承,PHP两个类使用同一个命名空间,无法相互调用
  10. LXReorderableCollectionViewFlowLayout
  11. Java_键盘输入语句
  12. OpenStack基本安装步骤
  13. 怎么根据分隔符号将Excel数据换行复制
  14. photoshop文字使用技巧
  15. 智明星通 CEO 唐彬森:创业过程中的几笔学费
  16. kubernetes 核心术语
  17. ThingJS技术分享:建筑建模常用软件一览 3D 可视化
  18. 这些网络故障的处理手段,你都试过了吗
  19. html css3不拉伸图片显示效果,类似淘宝的
  20. Radxa Rock 3a NPU调用指南

热门文章

  1. 如何建立您的电子商务邮件列表?
  2. 为什么找APP开发公司不选“北上广”
  3. 叶子的染色-基础树形dp
  4. python字典查询_python查询字典
  5. 跟 Xshell 说再见!推荐这款免费的终端工具
  6. 哪些工业相机不需要另配备图像采集卡?
  7. 总有起风的清晨,总有绚烂的黄昏,总有流星的夜晚
  8. vm linux 文件夹,根目录vmlinux的编译过程
  9. 查看树莓派中python安装路径
  10. 远程登录Linux工具PuTTY(密码和密钥两种方式)