MyBatis-Plus分页查询以及自定义sql分页的实现

  

<强>一、引言

分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。

物理分页:相当于执行了极限分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。

逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合。

那么议员中的物理分页怎么实现呢?往下看往下看

<强>二,配置

创建MybatisPlusConfig配置类,需要配置分页插件,小编使用的弹簧引导配置方式。

/* *   ,* @Auther:,这贱男   ,* @Date: 2019/6/12  15:06   ,* @Description: MybatisPlus配置类   ,*/@ configuration   public  class  MyBatisPlusConfig  {      ,/* *   ,,*,分页插件   ,,* @return   ,,*/,@ bean   public 才能;PaginationInterceptor  paginationInterceptor (), {   ,,,return  new  PaginationInterceptor ();   ,,}   }

<强>三,具体分页实现

议员的包装器提供了两种分页查询的方式,源码如下:

  ,/* *   ,,*,根据,entity 条件,查询全部记录(并翻页)   ,,*   ,,*,@param  page ,,,,分页查询条件(可以为,RowBounds.DEFAULT)   ,,*,@param  queryWrapper 实体对象封装操作类(可以为,null)   ,,*/IPage<才能;T>, selectPage (IPage, queryWrapper);      ,/* *   ,,*,根据,Wrapper 条件,查询全部记录(并翻页)   ,,*   ,,*,@param  page ,,,,分页查询条件   ,,*,@param  queryWrapper 实体对象封装操作类   ,,*/IPage<才能;Map<字符串,Object>祝辞,selectMapsPage (IPage, queryWrapper);

可见两个分页方法参数都是一致的,只是返回参数略有不同,具体选择根据实际业务为准。

  ,/* *   ,,*,分页查询   ,,*/@Test才能   public 才能;void  selectByPage (), {   ,,,QueryWrapper, wrapper =, new  QueryWrapper ();   ,,,wrapper.like (“name",,“雨”)使(“age",, 40);      ,,,Page, page =, new  Page<祝辞(1、2);      ,,,//IPage, userIPage =, userMapper.selectPage(页面,,包装);      ,,,IPage祝辞,mapIPage =, userMapper.selectMapsPage(页面,,包装);         ,,,System.out.println(“总页数“+ mapIPage.getPages ());   ,,,System.out.println(“总记录数“+ mapIPage.getTotal ());   ,,,List祝辞,records =, mapIPage.getRecords ();   ,,,records.forEach (system . out:: println);   以前,,}

以上分页查询执行sql如下,先是查询了一次总记录数,然后在查询的数据。

DEBUG==祝辞,准备:选择计数(1)从用户名字?和年龄& lt;吗?
DEBUG==比;参数:%雨%(字符串),40(整数)
TRACE<==,,,列:计数(1)
TRACE<==,,,,,,,行:2
DEBUG==祝辞,准备:选择id、姓名、年龄、电子邮件、manager_id, create_time从用户名字?和年龄& lt;吗?限制?,?
DEBUG==比;参数:%雨%(字符串),40(整数),0(长),2(长)
TRACE<==,,,列:id、姓名、年龄、电子邮件、manager_id, create_time
TRACE<==,,,,,,,行:2张雨琪,31岁,zjq@baomidou.com, 1088248166370832385, 2019-01-14 09:15:15
TRACE<==,,,,,,,行:3,刘红雨,31岁,lhm@baomidou.com, 1088248166370832385, 2019-01-14 09:48:16
DEBUG<==,,,,,总数:2
总页数1
总记录数2

现在我们有需求只要查询数据即可,不关心总记录数等,如果使用默认的方式就消耗不必要的性能。那么解决办法也是很简单的,只需要在创建页对象时传入第三个参数为假即可。

  ,Page page =, new  Page<祝辞(1、2、假);

<强>四、自定义sql分页查询

有时候查询的数据难免会出现多表连接查询,或者是一些复杂的sql语句,但是这些语句也是需要支持分页查询的,

先定义查询接口,第一个参数要是分页的参数,小编这里演示就写简单的sql。

步骤一:在mapper文件中,编写对应的分页查询接口。

步骤二:在xml中编写对应的sql语句,小编这里演示的" $ {ew.customSqlSegment} ",这个是如果你想自定义的sql语句,也想使用包装查询条件构造器,则需要在映射器接口中添加参数,以及xml中也要有固定只

MyBatis-Plus分页查询以及自定义sql分页的实现