MyBatis Plus 联表查询
官方文档: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 联表查询相关推荐
- mybatis一对一联表查询的两种常见方式
1.一条语句执行查询(代码如下图) 注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...
- Mybatis(第二篇:联表查询)
Mybatis(第二篇:联表查询) 目录 Mybatis(第二篇:联表查询) 一.前期 项目的搭建 1.数据库 2.IDEA项目架构搭建 2.1 pom.xml 2.2 domain包 2.2.1 D ...
- mybatis联表查询且统计数据
mybatis联表查询且统计数据 表1的数据+表2的数据的统计==>vo接收 前端原型图如下: 涉及到两张表 t_record t_user_record 详情A/B A:未签收人数 B:全部人 ...
- Springboot中使用Mybatis框架对数据库进行联表查询,踩坑填坑
因为mybatis使用的基本是原生sql语句 所以首先从数据库开始说 以mysql数据库为例,对表的连接查询分为四种 内连接,外连接,交叉连接,和联合连接 内连接使用比较运算符根据每个表共有的列的值匹 ...
- Spring Hibernate JPA 联表查询 复杂查询
(转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...
- Mybatis系列(三):Mybatis实现关联表查询
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...
- Mybatis 实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis 实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- 动态SQL 模糊查询 联表查询
1. 正文 1. set标签 和 foreach标签 trim标签 sql片段 2. mybatis映射文件处理特殊字符. 3. mybatis完成模糊查询. 4. 联表查询 2. 动态sql 2.1 ...
最新文章
- 2018-3-21李宏毅机器学习视频笔记(十二)--Backpropagation
- 数字图像处理:第十三章 图象复原
- 犀牛导出su文件错误插件错误_安利|一款免费插件blender-for-unrealengine
- php imap配置,php中的自定义IMAP命令
- 虚拟专题:知识图谱 | 基于网络防御知识图谱的0day攻击路径预测方法
- 8个超好用的Python内置函数,提升效率必备
- web前端之html从入门到精通
- 浓浓中国风的雅致新年元旦PSD分层海报模板
- php 命名空间不能继承,PHP两个类使用同一个命名空间,无法相互调用
- LXReorderableCollectionViewFlowLayout
- Java_键盘输入语句
- OpenStack基本安装步骤
- 怎么根据分隔符号将Excel数据换行复制
- photoshop文字使用技巧
- 智明星通 CEO 唐彬森:创业过程中的几笔学费
- kubernetes 核心术语
- ThingJS技术分享:建筑建模常用软件一览 3D 可视化
- 这些网络故障的处理手段,你都试过了吗
- html css3不拉伸图片显示效果,类似淘宝的
- Radxa Rock 3a NPU调用指南