参考文章:

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】联表分页查询实现的更多相关文章

  1. springBootJpa 联表分页查询总数不准的问题

    问题情景: 在联表查询时 ``` // 两张表关联查询 Join<Project, Plan> planJoin = root.join("plans", JoinTy ...

  2. Mybatis oracle多表联合查询分页数据重复的问题

    Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...

  3. Java基础-SSM之mybatis的统计函数和分页查询

    Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  5. mybatis之联表查询

    今天碰到了一个问题,就是要在三张表里面各取一部分数据然后组成一个list传到前台页面显示.但是并不想在后台做太多判断,(因为涉及到for循环)会拉慢运行速度.正好用的框架是spring+springM ...

  6. Mybatis框架-联表查询显示问题解决

    需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 这里需要在User实体类中添加 ...

  7. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  8. mybatis实现多表联合查询

    本文转自:http://www.cnblogs.com/xdp-gacl/p/4264440.html#!comments 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) ...

  9. Mybatis-plus多表关联查询,多表分页查询

    学习plus真的觉得写代码真的越来越舒服了.昨天开始接触吧,只要学会了多表关联查询.plus就能随意搭配使用了. 关于怎么搭建的就自行了去研究了哦.这里直接进入主题. 我用的是springboot+m ...

  10. sql连表分页查询(存储过程)

    1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...

随机推荐

  1. NOIP 2023 三值逻辑

    problem 我们定义 \(\text{T}\) 对应 \(n + 1\),\(\text{U}\) 对应 \(n + 2\),\(\text{F}\) 就是 \(-\text{T}\). 现在我们 ...

  2. 使用 Filebeat+Easysearch+Console 打造日志管理平台

    近年来,日志管理平台越来越流行.使用日志管理平台可以实时地.统一地.方便地管理和查看日志,挖掘日志数据价值,驱动运维.运营,提升服务管理效率. 方案架构 Beats 是轻量级采集器,包括 Filebe ...

  3. 微信支付普通商户与AppID账号关联管理-授权

    微信支付普通商户与AppID账号关联管理 二.名词解释 名词 释义 微信支付普通商户 公司企业.政府机关.事业单位.社会组织.个体工商户.个人卖家.小微商户.(微信支付商户接入指引) AppID 已通 ...

  4. ThreadLocal本地局部线程demo

    ThreadLocal本地局部线程demo import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Hash ...

  5. MySQL Docker搭建挂载并启用远程连接

    1.拉取镜像 后面可以指定版本号,这里使用8.0 docker pull docker.io/mysql:8.0 2.查看mysql镜像 docker images 3.启动docker并挂载 doc ...

  6. 使用python+pytesseract实现图片中文字的识别

    一.安装tesseract 1.下载链接 https://digi.bib.uni-mannheim.de/tesseract/ 2.网盘下载地址 链接:https://pan.baidu.com/s ...

  7. pytest-parallel 多线程执行用例,访问pymysql数据库,遇到的问题

    遇到的问题 1.pymysql.err.ProgrammingError: execute() first 2.File "D:\xxx\python3.8\lib\site-package ...

  8. SDL3 入门(3):三角形

    SDL3 提供了 SDL_RenderGeometry 函数绘制几何图形,用法和 OpenGL 差不多,先定义顶点数据,然后根据顶点数据绘制几何图形. 绘制三角形的代码如下: std::array&l ...

  9. python并发执行request请求

    在Python中,我们可以使用requests库来发送HTTP请求,并使用threading.multiprocessing.asyncio(配合aiohttp)或concurrent.futures ...

  10. Linux 内核:设备驱动模型(1)sysfs与kobject基类

    Linux 内核:设备驱动模型(1)sysfs与kobject基类 背景 学习Linux 设备驱动模型时,对 kobject 不太理解.因此,学习了一下. 现在我知道了:kobj/kset是如何作为统 ...