【Mybatis-Plus】联表分页查询实现
参考文章:
https://blog.csdn.net/weixin_43847283/article/details/125822614
上上周写的SQL案例确实可以重构,所以搬到Demo里面测试看看
案例需要的依赖库
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency> <dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join</artifactId>
<version>1.2.2</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
</dependencies>
这是原来的SQL脚本
SELECT
WX_USER.WEIXINID,
WX_USER.PHONENUM,
WX_USER.NICKNAME,
WX_USER.HEADIMGURL,
WX_USER.UNIONID ,
WX_USER.CREATETIME,
WX_USER.WEIXINID,
WX_USER.UPDATETIME,
MERCHANT.MERCHANT_NO,
MERCHANT.MERCHANT_NAME AS merchantName ,
MERCHANT.PROVINCE AS province,
MERCHANT.CITY AS city,
MERCHANT.AREA AS areaCode
FROM
`aisw_user` WX_USER
LEFT JOIN `aisw_merchant` MERCHANT ON WX_USER.MERCHANT_NO = MERCHANT.MERCHANT_NO
WHERE 1 = 1
<if test="user.phonenum != null and user.phonenum != ''">
AND WX_USER.PHONENUM LIKE CONCAT('%', #{user.phonenum},'%')
</if>
<if test="user.unionid != null and user.unionid != ''">
AND WX_USER.UNIONID LIKE CONCAT('%', #{user.unionid},'%')
</if>
<if test="user.timeline0 != null and user.timeline0 != '' and user.timeline1 != null and user.timeline1 != ''">
AND WX_USER.CREATETIME BETWEEN #{user.timeline0} AND #{user.timeline1}
</if>
<if test="user.merchantName != null and user.merchantName != ''">
AND (
MERCHANT.MERCHANT_NO LIKE CONCAT('%', #{user.merchantName},'%')
OR
MERCHANT.MERCHANT_NAME LIKE CONCAT('%', #{user.merchantName},'%')
)
</if>
<if test="user.province != null and user.province != ''">
AND MERCHANT.PROVINCE = #{user.province}
</if>
<if test="user.city != null and user.city != ''">
AND MERCHANT.CITY = #{user.city}
</if>
<if test="user.areaCode != null and user.areaCode != ''">
AND MERCHANT.AREA = #{user.areaCode}
</if>
ORDER BY WX_USER.CREATETIME DESC
Dao调用代码:
/**
* /aiswUser/queryUserPage
* @description: 查询aisw用户列表
* @author: cloud9
* @date: 2022/06/24 11:31
* @param dto
* @return: cn.ymcd.comm.page.PageResult<cn.ymcd.aisw.common.strategy.dto.UserDTO>
**/
@PostMapping(value = "/queryUserPage")
public IPage<UserDTO> queryUserPage(@RequestBody UserDTO dto) {
IPage iPage = userDAO.queryUserPageWithMerchantInfo(dto.getPage(), dto);
return iPage;
}
换成MPJMapper实现:
@PostMapping(value = "/queryUserPage2")
public IPage<UserDTO> queryUserPage2(@RequestBody UserDTO dto) {
IPage<UserDTO> page = userDAO.selectJoinPage(
dto.getPage(),
UserDTO.class,
new MPJLambdaWrapper<UserDTO>()
.selectAll(UserDTO.class)
.selectAs(AiswMerchantDTO::getMerchantName, UserDTO::getMerchantName)
.selectAs(AiswMerchantDTO::getProvince, UserDTO::getProvince)
.selectAs(AiswMerchantDTO::getCity, UserDTO::getCity)
.selectAs(AiswMerchantDTO::getArea, UserDTO::getAreaCode)
.leftJoin(AiswMerchantDTO.class, AiswMerchantDTO::getMerchantNo, UserDTO::getMerchantNo)
.like(!StringUtils.isEmpty(dto.getUnionid()), UserDTO::getUnionid, dto.getUnionid())
.like(!StringUtils.isEmpty(dto.getPhonenum()), UserDTO::getPhonenum, dto.getPhonenum())
.and(
!StringUtils.isEmpty(dto.getMerchantName()),
wq -> wq
.like(AiswMerchantDTO::getMerchantName, dto.getMerchantName())
.or()
.like(AiswMerchantDTO::getMerchantNo, dto.getMerchantName())
)
.between(
!StringUtils.isEmpty(dto.getTimeline0()) && !StringUtils.isEmpty(dto.getTimeline1()),
UserDTO::getTimeline, dto.getTimeline0(), dto.getTimeline1()
)
.eq(!StringUtils.isEmpty(dto.getProvince()), AiswMerchantDTO::getProvince, dto.getProvince())
.eq(!StringUtils.isEmpty(dto.getCity()), AiswMerchantDTO::getCity, dto.getCity())
.eq(!StringUtils.isEmpty(dto.getAreaCode()), AiswMerchantDTO::getProvince, dto.getAreaCode())
.orderByDesc(UserDTO::getCreatetime)
);
return page;
}
两者的SQL比较:
-- MPJ生成SQL
SELECT
t.ID,
t.WEIXINID,
t.PHONENUM,
t.NICKNAME,
t.PROVINCE,
t.PLACECITY,
t.PLACEAREA,
t.HEADIMGURL,
t.UNIONID,
t.CREATETIME,
t.UPDATETIME,
t.TIMELINE,
t.MERCHANT_NO,
t1.MERCHANT_NAME AS merchantName,
t1.PROVINCE AS province,
t1.CITY AS city,
t1.AREA AS areaCode
FROM
aisw_user t
LEFT JOIN aisw_merchant t1 ON ( t1.MERCHANT_NO = t.MERCHANT_NO )
WHERE
( t.TIMELINE BETWEEN '2022-07-13 00:00:00' AND '2022-08-23 23:59:59' )
ORDER BY
t.CREATETIME DESC -- 我写的SQL
SELECT
WX_USER.WEIXINID,
WX_USER.PHONENUM,
WX_USER.NICKNAME,
WX_USER.HEADIMGURL,
WX_USER.UNIONID,
WX_USER.CREATETIME,
WX_USER.WEIXINID,
WX_USER.UPDATETIME,
MERCHANT.MERCHANT_NO,
MERCHANT.MERCHANT_NAME AS merchantName,
MERCHANT.PROVINCE AS province,
MERCHANT.CITY AS city,
MERCHANT.AREA AS areaCode
FROM
`aisw_user` WX_USER
LEFT JOIN `aisw_merchant` MERCHANT ON WX_USER.MERCHANT_NO = MERCHANT.MERCHANT_NO
WHERE
1 = 1
AND WX_USER.CREATETIME BETWEEN '2022-07-13 00:00:00'
AND '2022-08-23 23:59:59'
ORDER BY
WX_USER.CREATETIME DESC
【Mybatis-Plus】联表分页查询实现的更多相关文章
- springBootJpa  联表分页查询总数不准的问题
		
问题情景: 在联表查询时 ``` // 两张表关联查询 Join<Project, Plan> planJoin = root.join("plans", JoinTy ...
 - Mybatis oracle多表联合查询分页数据重复的问题
		
Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...
 - Java基础-SSM之mybatis的统计函数和分页查询
		
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
 - MyBatis 中两表关联查询MYSQL (14)
		
MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...
 - mybatis之联表查询
		
今天碰到了一个问题,就是要在三张表里面各取一部分数据然后组成一个list传到前台页面显示.但是并不想在后台做太多判断,(因为涉及到for循环)会拉慢运行速度.正好用的框架是spring+springM ...
 - Mybatis框架-联表查询显示问题解决
		
需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 这里需要在User实体类中添加 ...
 - JdbcTemplate+PageImpl实现多表分页查询
		
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
 - mybatis实现多表联合查询
		
本文转自:http://www.cnblogs.com/xdp-gacl/p/4264440.html#!comments 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) ...
 - Mybatis-plus多表关联查询,多表分页查询
		
学习plus真的觉得写代码真的越来越舒服了.昨天开始接触吧,只要学会了多表关联查询.plus就能随意搭配使用了. 关于怎么搭建的就自行了去研究了哦.这里直接进入主题. 我用的是springboot+m ...
 - sql连表分页查询(存储过程)
		
1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...
 
随机推荐
- python+k8s——基础练习
			
列表 core_api = client.CoreV1Api() # 管理核心资源(Pod, Service, ConfigMap 等) apps_api = client.AppsV1Api() # ...
 - 使用python在k8s中创建一个pod
			
要在Kubernetes (k8s) 中使用Python创建一个Pod,你可以使用Kubernetes Python客户端库(通常称为kubernetes或kubernetes-client).以下是 ...
 - v-once指令  v-if和v-show
			
v-once指令 只渲染元素和组件一次,之后元素和组件将失去响应式功能 v-if和v-show 根据表达式的布尔值(true/false)进行判断是否渲染该元素 注:v-if 有更高的切换开销,而 v ...
 - kettle从入门到精通 第四十七课 ETL之kettle mongo output 写入
			
1.上一节课我们学习了mongo input读取步骤,本节课我们一起学习下mongo out 写入步骤,该步骤可以将数据写入到mongo中,如下图所示. 2. 配置mongo连接,有两种方式,如截图所 ...
 - element table根据条件隐藏复选框
			
在<el-table>标签加 :cell-class-name="cellClass" 在 <el-table-column type="selecti ...
 - spring jpa restful请求示例
			
创建项目 导入jar包mysql 数据库和连接池jar <dependency> <groupId>org.springframework.boot</groupId&g ...
 - nginx轮询负载均衡演示demo
			
1.nginx /conf/nginx.conf配置文件 #user nobody; worker_processes auto; #error_log logs/error.log; #error_ ...
 - spark读取hive表,org.apache.spark.sql.AnalysisException: Unsupported data source type for direct query on files: hive;
			
异常出现:spark读取hive表时,spark.read.table(hive.test) hdp版本的spark默认的catalog是spark,配置项 metastore.catalog.def ...
 - 洛谷 P1226 快速幂
			
题目链接:快速幂 思路 简单快速幂模板.a ^ 17 = (a ^ 2) ^ 8 * a,此时pow()中的y就可以视为17 -> 8(y >>= 1),pow()中的x就是底数a ...
 - TCP,UDP,IP,数据链路层头部详解
			
UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...