学习Spring Boot:(八)Mybatis使用分页插件PageHelper

首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了。

本文主要介绍使用拦截器的方式实现分页。

实现原理

拦截器实现了拦截所有查询需要分页的方法,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句,从而达到SQL 分页的目的,它的好处不用多说了,代码也写的很少,对SQL 的侵入较少,推荐使用。

步骤

添加依赖

<pagehelper.version>1.2.3</pagehelper.version><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version>
</dependency>

配置文件

在系统配置文件中加入pagehelper的配置信息:

pagehelper:helper-dialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSql

针对pagehelper的配置参数,查询了一下:
\1. helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
**特别注意:**使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。
你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。

  1. offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。
    当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。
  2. rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。
    当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。
  3. pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。
  4. reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,
    pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
  5. params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
    可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
    默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
  6. supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
    使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTestArgumentsObjTest
  7. autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页
    (不支持自动选择sqlserver2012,只能使用sqlserver),用法和注意事项参考下面的场景五
  8. closeConn:默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接,
    通过该属性来设置是否关闭获取的这个连接,默认true关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。

重要提示:

offsetAsPageNum=false 的时候,由于 PageNum 问题,RowBounds查询的时候 reasonable 会强制为 false。使用 PageHelper.startPage 方法不受影响。
注: PageRowBounds 想要查询总数也需要配置该属性为 true

使用

在业务查询 的时候加上

PageHelper.startPage(pageIndex, pageSize);

例如:

@Overridepublic List<SysUserEntity> query(SysUserEntity user) {// 查询第一页的两条数据PageHelper.startPage(1, 2);return sysUserDao.query(user);}

测试一下返回结果:

image

我们来看下它执行的SQL :

Preparing: SELECT count(0) FROM sys_user 
Parameters: Total: 1
Preparing: SELECT * FROM sys_user LIMIT ? 
Parameters: 2(Integer)Total: 2

补充

使用方法

使用的时候,需要仔细阅读作者的文章
pagehelper/Mybatis-PageHelper

主要是阅读使用方法,以及各个场景中使用什么方法解决问题,注意事项。

分页排序

PageHelper.startPage(pageIndex, pageSize, orderBy);

支持返回PageInfo

    @Overridepublic PageInfo queryByPageInfo(SysUserEntity user) {return PageHelper.startPage(1,2).doSelectPageInfo(() -> sysUserDao.query(user));}

使用Swagger测试返回数据:

{"pageNum": 1,"pageSize": 2,"size": 2,"startRow": 1,"endRow": 2,"total": 4,"pages": 2,"list": [{"id": 1,"username": "def","password": "123","mobile": null,"email": null,"createUserId": null,"createDate": null},{"id": 7,"username": "wuwii","password": "123","mobile": null,"email": null,"createUserId": null,"createDate": null}],"prePage": 0,"nextPage": 2,"isFirstPage": true,"isLastPage": false,"hasPreviousPage": false,"hasNextPage": true,"navigatePages": 8,"navigatepageNums": [1,2],"navigateFirstPage": 1,"navigateLastPage": 2,"firstPage": 1,"lastPage": 2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php递归删除文件,PHP 递归删除文件夹

用PHP实现递归删除整个文件夹。如果有什么不对的&#xff0c;请大家指教。/***遍历删除文件夹**param $dir 要删除文件夹的文件夹*/public function del_Dir($dir){$flag $this->is_empty_dir($dir);if( $flagfalse ){$dp opendir($dir);while(false ! $file readdir($dp…

学习Spring Boot:(九)统一异常处理

前言 开发的时候&#xff0c;每个controller的接口都需要进行捕捉异常的处理&#xff0c;以前有的是用切面做的&#xff0c;但是SpringMVC中就自带了ControllerAdvice &#xff0c;用来定义统一异常处理类&#xff0c;在 SpringBoot 中额外增加了 RestControllerAdvice。 使用…

php7 ast,PHP7 的抽象语法树(AST)带来的变化

什么是抽象语法树&#xff1f;抽象语法树(abstract syntax tree&#xff0c;AST)是源代码的抽象语法结构的树状表示&#xff0c;树上的每个节点都表示源代码中的一种结构&#xff0c;这所以说是抽象的&#xff0c;是因为抽象语法树并不会表示出真实语法出现的每一个细节&#x…

学习Spring Boot:(十)使用hibernate validation完成数据后端校验

前言 后台数据的校验也是开发中比较注重的一点&#xff0c;用来校验数据的正确性&#xff0c;以免一些非法的数据破坏系统&#xff0c;或者进入数据库&#xff0c;造成数据污染&#xff0c;由于数据检验可能应用到很多层面&#xff0c;所以系统对数据校验要求比较严格且追求可…

js面向对象与java面向对象的区别,被坑了,js语法跟Java面向对象语法还是有区别的...

请见代码&#xff0c;实现功能是要点表格当前行里的删除链接&#xff0c;直接删除当前行&#xff0c;并且删到最后一行的时候&#xff0c;把包含当前table的div直接隐藏了。function delCurrentTr(){//这两句一定要写在$(this)对象删除之前&#xff0c;否则$(this)对象执行删除…

学习Spring Boot:(十一) 自定义装配参数

前言 SpringMVC 中 Controller 中方法的参数非常灵活&#xff0c;得益于它的强大自动装配&#xff0c;这次将根据上次遗留下的问题&#xff0c;将研究下装配参数。 正文 SpringMVC中使用了两个接口来处理参数&#xff1a; * HandlerMethodArgumentResolver 处理方法请求参数…

php多个参数绑定,php – 如何绑定多个参数到MySQLi查询

我有一个mysql查询,但我不能绑定paramSELECT users.email,users.handle,userprofile.mobile FROM users,userprofile WHERE users.email ? OR users.handle ? OR userprofile.mobile?我试过下面的行$query "SELECT users.email,users.handle,userprofile.mobile FROM …

学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型&#xff0c;数据库存储的是枚举的值&#xff0c;发现它不能自动装载。 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是&#xff1a;org.apache.ibatis.type.EnumTypeHandler 和 org.apache.ibatis.typ…

php旅行社网站源码在线支付,PHP各大支付平台在线支付集成源码

演示查看&#xff1a;http://www.erdangjiade.com/ph...php给客户开发网站的时候需要用到各大平台付款功能&#xff0c;下面就免费分享给大家&#xff0c;此类是个成熟类&#xff0c;网上down下来的&#xff0c;经过修改测试了(可以直接拿来使用&#xff0c;附带使用方法&#…

学习Spring Boot:(十三)配置 Shiro 权限认证

经过前面学习 Apache Shiro &#xff0c;现在结合 Spring Boot 使用在项目里&#xff0c;进行相关配置。 正文 添加依赖 在 pom.xml 文件中添加 shiro-spring 的依赖&#xff1a; <dependency><groupId>org.apache.shiro</groupId><artifactId>shir…

php设计之初用于什么,PHP设计模式(七)之门面模式

一、什么是外观模式(Facade Pattern)定义&#xff1a;外观模式又称门面模式&#xff0c;提供一个统一的接口&#xff0c;用来访问子系统中的一群接口。外部与子系统之间的通信采用门面(Facade)对象来完成。【举例】比如麦当劳套餐&#xff0c;套餐包含鸡肉卷、汉堡包、可乐等N个…

学习Spring Boot:(十四)spring-shiro的密码加密

前言 前面配置了怎么使用 shiro &#xff0c;这次研究下怎么使用spring shiro的密码加密&#xff0c;并且需要在新增、更新用户的时候&#xff0c;实现生成盐&#xff0c;加密后的密码进行入库操作。 正文 配置凭证匹配器 Beanpublic HashedCredentialsMatcher hashedCreden…

php 仿高德,仿高德路线规划滑动效果

因为项目有个界面要模仿高德地图路径规划滑动效果&#xff0c;因此写了demo&#xff0c;并简单说下分析过程。高德地图效果演示:仿高德路线规划滑动.gifdemo效果演示:高德地图规划滑动.gif一. 分析首先&#xff0c;我们可以看出这个滚动的视图应该是UIScrollView或者UIScrollVi…

php验证码完整功能,PHP验证码功能的实现

/***产生验证码图片*/public function actionVerfiycode() {Header ( "Content-type: image/gif" );$border 0; //是否要边框 1要:0不要$how 4; //验证码位数$w $how * 15; //图片宽度$h 20; //图片高度$fontsize 5; //字体大小$alpha "abcdefghijkmnopqr…

学习Spring Boot:(十五)使用Lombok来优雅的编码

前言 Lombok 是一种 Java? 实用工具&#xff0c;可用来帮助开发人员消除 Java 的冗长&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖&#xff1a; <lombok.version>1.…

java 品尝饮料,java细节经典题型

28. 选项中哪一行代码可以替换题目中//add code here 而不产生编译错误?() [java] view plaincopy 1. public abstract class MyClass { 2. 3. 4. 5.......Java 基础试题 一:选择题(1*3030) (题目写在答题纸上面) 1:Java 提供哪几种运算符多选 ( abcd )。 A)算术运算符 B)位运…

学习Spring Boot:(十六)使用Shiro与JWT 实现认证服务

前言 代码可以参考 需要把Web应用做成无状态的&#xff0c;即服务器端无状态&#xff0c;就是说服务器端不会存储像会话这种东西&#xff0c;而是每次请求时access_token进行资源访问。这里我们将使用 JWT 1&#xff0c;基于散列的消息认证码&#xff0c;使用一个密钥和一个消…

java泛型和注解,泛型 · 注解和泛型 · 看云

[TOC]# 泛型## 为什么要使用泛型在之前学过的集合框架中&#xff0c;List和Map都使用了泛型技术来确认其内容的数据类型。如果不使用泛型&#xff0c;在程序运行阶段&#xff0c;会带来数据类型转型的错误风险。~~~List list new ArrayList();list.add("tom");for (…

java程序单引号报错,javapoigetInpuStream报错br/是这样的, 爱问知识人

是这样的&#xff0c;我写了重载了两个getInputStream方法&#xff0c;当调用不带参数的方法时&#xff0c;运行正常&#xff0c;当调用带参的方法则报 Can not find a java.io.InputStream with the name [inputStream] in是这样的&#xff0c;我写了重载了两个getInputStream…

学习Spring Boot:(十七)Spring Boot 中使用 Redis

前言 Redis是一个由Salvatore Sanfilippo写的key-value存储系统。 edis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 通常被称为数据结构服务器&#xff0c;因为值&#xff08;va…