博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis 分页插件 PageHelper
阅读量:6292 次
发布时间:2019-06-22

本文共 3459 字,大约阅读时间需要 11 分钟。

hot3.png

1.简介

官网: PageHelper可以说是目前最流行的MyBatis分页插件了,它使用起来非常简单且提供一整套的解决方案。以下,我们以传统Spring项目为例,介绍如何进行使用。SpringBoot的配置十分简单,可以直接参照项目: 。

2.配置

以下内容摘自

2.1.jar

如果项目不使用maven,可以下载下面的jar添加到classpath中:

如果使用 Maven,则可以使用下面的方式:

com.github.pagehelper
pagehelper
5.1.4

注意:SpringBoot 项目不是引用这个依赖,具体请参照我上面给出的参照项目。

2.2.配置拦截器插件

2.2.1.在 MyBatis 配置 xml 中配置拦截器插件

我们不用这种方法,因为官网的示例中没有使用这种配置方法。

2.2.2.在 Spring 配置文件中配置拦截器插件

我们可以使用 spring 的属性配置方式,其官网示例中这样配置:

classpath:mapper/*.xml
helperDialect=mysql reasonable=true supportMethodsArguments=true params=count=countSql autoRuntimeDialect=true

各项配置的含义可以参照:

3.使用方式

3.1.service层分页

PageHelper的最大优势就在于其使用方便,在需要分页的时候,我们只需要在调用mapper层前面这样写即可:

//分页查询

PageHelper.startPage(pageNum, pageSize);return mapper.selectByExample(example);

建议只使用startPage的方式,不使用其他方式。这个函数的源码如下:

/** * 开始分页 * * @param pageNum  页码 * @param pageSize 每页显示数量 */public static 
Page
startPage(int pageNum, int pageSize) { return startPage(pageNum, pageSize, DEFAULT_COUNT);}

3.2.controller层分页对象

当我们返回分页结果给前台时,不能只返回结果,需要使用PageHelper提供的包装类。具体使用的方式如下:

List
countryList = countryService.selectByCountry(country, page, rows);result.addObject("pageInfo", new PageInfo
(countryList));

这里提到了PageInfo对象,准确说是泛型。它有哪些属性呢?源码中给出了以下可以使用的属性:

//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//由于startRow和endRow不常用,这里说个具体的用法//可以在页面中"显示startRow到endRow 共size条数据"//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号private int endRow;//总页数private int pages;//前一页private int prePage;//下一页private int nextPage;//是否为第一页private boolean isFirstPage = false;//是否为最后一页private boolean isLastPage = false;//是否有前一页private boolean hasPreviousPage = false;//是否有下一页private boolean hasNextPage = false;//导航页码数private int navigatePages;//所有导航页号private int[] navigatepageNums;//导航条上的第一页private int navigateFirstPage;//导航条上的最后一页private int navigateLastPage;

由于这里面的属性已经很全了,所以基本上我们不需要添加。如果需要其中的某些值,只需要调用相应的get方法即可。

4.安全提醒

某些操作可能导致该插件无法正常使用,请认证阅读以下重要提示: · 只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select)方法会被分页。 · 请不要在系统中配置多个分页插件(使用Spring时,mybatis-config.xml和Spring<bean>配置方式,请选择其中一种,不要同时配置多个分页插件)! · 分页插件不支持带有for update语句的分页。对于带有for update的sql,会抛出运行时异常,对于这样的sql建议手动分页,毕竟这样的sql需要重视。可能大部分人和我一样不懂是什么语句,类似这样的句子: select * from shortlink where long_url = 'long2' for update; 这类语句是为了给某些行上锁的。 · 由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。啥是嵌套结果呢?下面有个例子:

            
            
            
            
          
            
            
            
            
            
        
        

转载于:https://my.oschina.net/hengbao666/blog/2244679

你可能感兴趣的文章
三大WEB服务器对比分析(apache ,lighttpd,nginx)
查看>>
PowerDesigner 生成的脚本取掉双引号
查看>>
读书笔记4数据的读入和保存
查看>>
Centos6.7安装docker1.7.1
查看>>
jQuery使用经验建议
查看>>
带条件Count
查看>>
water-and-jug-problem
查看>>
【CSS进阶】CSS 颜色体系详解
查看>>
vb asp.net的一些属性值
查看>>
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数详解
查看>>
.NET MVC-去掉验证
查看>>
Logstash为什么那么慢?—— json序列化
查看>>
OSSEC配置文件ossec.conf中添加mysql服务
查看>>
排列与组合的一些定理(二)
查看>>
Apache RocketMQ Meetup深圳首秀 引开源爱好者追捧
查看>>
法国拟将雷诺与日产合并 代表团抵日进行谈判
查看>>
京津冀青少年网球分级赛总决赛开打 118名选手对决
查看>>
济南交警推出《酒驾整治日历》酒驾为每日必查项
查看>>
失手打死请自己吃饭的酒友 嫌疑人在深圳落网
查看>>
数据分析师常用的十种数据分析思路,你都知道吗?
查看>>