参考文章:

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. 「AntV」X6 自定义vue节点(vue3)

    官方文档 本篇文档只讲解vue3中如何使用,vue2的可以参考下官方文档 安装插件 @antv/x6-vue-shape 添加vue组件 既然使用vue节点,那么我们就需要准备一个vue的组件,这个组 ...

  2. mescroll.js 使用

    mescroll.js 使用 附:点击查看中文文档 第一步:引入css和js // unpkg的CDN: <link rel="stylesheet" href=" ...

  3. uniapp 判断当前是保存还是修改操作

    步骤分析: 首先得确定你进入表单后传入了id或者整个对象[这里使用id来进行讲解]其次就是两个请求:POST(保存的) 和 PUT(修改的)最后就是通过传入的id是否存在进行判断即可  POST 请求 ...

  4. 58同城的登录(RSA算法)

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 58同城的登录(RSA算法) 日期:2016-11-23 ...

  5. 将强化学习重新引入 RLHF

    我们很高兴在 TRL 中介绍 RLOO (REINFORCE Leave One-Out) 训练器.作为一种替代 PPO 的方法,RLOO 是一种新的在线 RLHF 训练算法,旨在使其更易于访问和实施 ...

  6. Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of directory 'dist\matlabengine.egg-info' 的解决方案

    目录 Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of dir ...

  7. DotNet Web应用单文件部署系列

    目录 一.    pubxml文件配置 二.    打包wwwroot文件夹 三.    混淆dll文件 四.    csproj文件配置 五.    批处理 六.    Windows服务安装 七. ...

  8. Windows下USB声卡音量调整

    买了一个绿联的USB声卡, 但是默认的音量太大了,最低音量都响的不行. 查了一下, 发现了一个叫EqualizerAPO的软件可以调整输出设备的音量. https://equalizerapo.com ...

  9. 4.4K Star!推荐一款新一代的极简监控系统!轻量高性能!超500个监控指标,颜值高、功能强大!

    在信息化快速发展的今天,企业运维面临的挑战日益增多.传统的运维监控系统往往存在功能冗余.性能低下.操作复杂等问题,难以满足现代企业对高效.稳定.智能的运维管理需求. 今天给大家推荐一款新一代极简运维监 ...

  10. .NET 6 Entity Framework Core Db First(2) 增删改查

    基础代码 在Program.cs注入DemoContext 新建HomeController,继承ControllerBase 添加Controller特性,[ApiController] [Rout ...