方式一:XML

有点繁琐,不太想用

mapper接口

public interface RoomMapper extends BaseMapper<Room> {

    List<RoomVO> getRoomPageList(Page page, @Param("roomPageReq")RoomPageReq roomPageReq);
}

xml

和常见的一样

    <select id="selectProductPage" resultType="com.xxx">
SELECT
p.id id,
ppr.product_code productCode,
p.`name` productName,
p.`url` supplyUrl,
p.`img_url` mainPicUrl,
p.carry_status carryStatus,
p.carry_status_desc carryStatusMsg,
p.create_time createTime
FROM product AS p
LEFT JOIN product_pull_record AS ppr ON p.id = ppr.product_id and ppr.`primary_sign` = 0
<where>
p.`delete_status` = 0
<if test="code != null">
and ppr.product_code =#{code}
</if>
<if test="name != null">
and p.`name` like concat("%",#{name},"%")
</if>
</where>
ORDER BY p.create_time DESC LIMIT #{index}, #{limit}
</select>

服务层

加上mybatis的分页对象,组成查询条件

自己手动加上分页参数,我个人比较喜欢这种

    public PageBean<ProductRecordResp> selectPageList(String name, Long code, Integer page, Integer limit) {
Integer index = (--page) * limit;
List<ProductRecordResp> respList = productMapper.selectProductList(name, code, index, limit);
Long count = productMapper.selectProductCount(name, code);// 与分页sql类似,用count()
return new PageBean<>(page, limit, count, respList);
}

方式二:mapper接口注解

新项目加上的,感觉不错,仿照jpa写的

mapper接口

@Mapper
public interface MessageMapper extends BaseMapper<Message> { @Select("SELECT m.`id`, mt.`project_id`, mt.`content`, UNIX_TIMESTAMP(m.`create_time`) AS create_time, m.`status` " +
"FROM `message` m LEFT JOIN `message_text` mt ON m.message_text_id = mt.id " +
"where 1=1 and ${ew.sqlSegment}")
List<MessageResponse> findMessagePage(Page<MessageResponse> pageParam, @Param(Constants.WRAPPER) QueryWrapper<MessageResponse> queryWrapper);
}

服务层

组装参数

public List<MessageResponse> findMessagePage(Long userId, Integer status, Long startTime, Long endTime, Integer page, Integer limit) {
Page<MessageResponse> pageParam = new Page<>(page, limit);
    QueryWrapper<MessageResponse> wrapper = new QueryWrapper<>();
    wrapper.eq("receive_id", userId);
    wrapper.eq(ObjectUtil.isNotNull(status), "status", status);
    wrapper.ge(ObjectUtil.isNotNull(startTime), "create_time", ObjectUtil.isNull(startTime) ? null : Times.toLocalDateTime(startTime));
    wrapper.le(ObjectUtil.isNotNull(endTime), "create_time", ObjectUtil.isNull(endTime) ? null : Times.toLocalDateTime(endTime));
     wrapper.orderByDesc("create_time"); 
    return messageMapper.findMessagePage(pageParam, wrapper);
}

MybatisPlus 实现多表联合分页条件查询的更多相关文章

  1. .net通用CMS快速开发框架——问题1:Dapper通用的多表联合分页查询怎么破?

    最近在弄一个东东,类似那种CMS的后台管理系统,方便作为其它项目的初始化框架用的. 现在遇到个问题,如标题所示:Dapper通用的多表联合分页查询怎么破? 难道只能通过拼接sql或者使用存储过程吗?我 ...

  2. 关于表 datatable的条件查询

    关于表 datatable的条件查询 从数据库中获得一个datatable dt .里面有很多的死的数据.然后,我就是要在这个表中来按条件查询,例如 dt中有个列叫"palte", ...

  3. Mybatis 的分页条件查询语句编写

    刚来到一家新公司, 翻看项目代码, 发现一位同事写的查询逻辑很好, 不用插件, 一个语句完成了分页条件查询. 而我之前一般都是在业务层对参数进行判断, 如果有条件,就调用条件查询的方法, 如果没有条件 ...

  4. 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】

    将一个多表关联的条件查询中的多表通过 create   select  转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...

  5. thinkphp分页+条件查询

    最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除. 解决办法: 1.form表单method= ...

  6. SQL多表联合分页.....

    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go /* 支持多表查询分页存储过程(事理改进)2012.3 --多表联查1 declare @Count int ...

  7. JPA简单的分页条件查询

    1,service层代码: @Override public QrCodeRecordPaging getPage(String projectId, Integer pageNumber, Inte ...

  8. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...

  9. Mybatis Plus带多条件的多表联合、分页、排序查询

    目录 一.现有表 student学生表: facultylist学院表: 二.同时满足以下需求: 1.多表联合查询出学院名字 2.可以带多条件查询 3.指定页码,页数据大小进行物理分页查询 三.解决步 ...

  10. SpringBoot+SpringDataJPA如何实现自定义查询[多表,多条件,分页,自定义sql封装]

    举个例子:我们要在已经搭建好了的JPA环境下实现联合多表,多条件,多排序条件,分页查询一个表格数据,下面的表格 返回类MyJSON: public class MyJSON { private Str ...

随机推荐

  1. 【10】python之条件判断

    Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块. Python中没有switch – case语句,也没有三元运算符. 1.if 语句 Pytho ...

  2. ETL常用的三种工具介绍及对比Datastage,Informatica和Kettle

    https://blog.csdn.net/qq_34901049/article/details/103676959 大数据量下Informatica与Datastage的处理速度是比较快的,比较稳 ...

  3. 从URL中获取参数

    1.跳转测试页面  获取的url上的参数    <!doctype html> <html lang="en"> <head>     < ...

  4. hadoop单机测试环境安装(简)

    1.下载hadoop官网就可以下载.可以直接搜hadoop  ,  其实可以直接查看官网的版主文档搭建https://hadoop.apache.org/docs/stable/hadoop-proj ...

  5. 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究

    网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究 岳峰 15901092122 --------------------- ...

  6. Ajax 后台传值接收方法

    $.ajax({ method: 'post', //数据类型 url: 'service.ashx?method=PostFile', //传输页面和页面方法 dataType: "jso ...

  7. Word技巧:ALT+X快捷键

    Word技巧:ALT+X快捷键 在Word中输入数字,然后使用键盘快捷键「ALT + X」,即可快速生成一个文字图形. 部分数字的对比参照: 2564 ╤ 2582 ▂ 2600 2618 ☘ 256 ...

  8. VirtualBox_Ubuntu22.10_Terminal无法打开

    https://blog.csdn.net/weixin_43959807/article/details/128872860

  9. select * into,insert into,create table

    SELECT * INTO Table2 FROM Table1要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中 INSERT I ...

  10. macOS开发应用Sign(签名)和Notarizaiton(公证)

    签名 可执行文件签名: codesign -f -s ${证书ID} --timestamp ${签名文件} .Pkg安装文件签名: productsign --timestamp --sign ${ ...