参考:https://blog.csdn.net/chenjunfengf/article/details/76785442
https://www.cnblogs.com/qlong8807/p/5580424.html
https://blog.csdn.net/kalnon/article/details/79559627
https://blog.csdn.net/zaomengshi1045518847/article/details/79953891
GitHub源代码地址:https://github.com/pagehelper/Mybatis-PageHelper
一、pom依赖:
<!-- 分页插件(分页插件不支持嵌套结果映射、不支持带有for update语句的分页) -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.4</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!--mybatis-spring整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
二、sqlSessionFactory中配置拦截器插件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--mybatis配置文件-->
<property name="configLocation" value="classpath:conf/mybatis/mybatis-config.xml"></property>
<!--配置连接数据库数据源-->
<property name="dataSource" ref="dataSource"/>
<!-- 类型别名包,默认引入所有类 -->
<property name="typeAliasesPackage" value="com.xiaomi.pojo"></property>
<!--配置Mapper文件所在位置-->
<property name="mapperLocations" value="classpath:/mybatis/sqlMap_*.xml"/>
<!-- 配置拦截器插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=mysql
reasonable=true
supportMethodsArguments=true
params=count=countSql
autoRuntimeDialect=true
pageSizeZero=false
supportMethodsArguments=false
</value>
</property>
</bean>
</array>
</property>
</bean>
分页插件中使用到的参数说明
helperDialect
:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
你可以配置helperDialect
属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:oracle
,mysql
,mariadb
,sqlite
,hsqldb
,postgresql
,db2
,sqlserver
,informix
,h2
,sqlserver2012
,derby
特别注意:使用 SqlServer2012 数据库时,需要手动指定为sqlserver2012
,否则会使用 SqlServer2005 的方式进行分页。
你也可以实现AbstractHelperDialect
,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。reasonable
:分页合理化参数,默认值为false
。当该参数设置为true
时,pageNum<=0
时会查询第一页,pageNum>pages
(超过总数时),会查询最后一页。默认false
时,直接根据参数进行查询(一般都是填写true)。params
:为了支持startPage(Object params)
方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
可以配置pageNum,pageSize,count,pageSizeZero,reasonable
,不配置映射的用默认值,
默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
(一般都是用默认值)。supportMethodsArguments
:支持通过 Mapper 接口参数来传递分页参数,默认值false
,分页插件会从查询方法的参数值中,自动根据上面params
配置的字段中取值,查找到合适的值时就会自动分页。autoRuntimeDialect
:默认值为false
。设置为true
时,允许在运行时根据多数据源自动识别对应方言的分页
(不支持自动选择sqlserver2012
,只能使用sqlserver
)一般都是填写true)pageSizeZero
:默认值为false
,当该参数设置为true
时,如果pageSize=0
或者RowBounds.limit = 0
就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page
类型)。(一般都是填写false
)
三、代码中使用
//获取第1页,20条内容,默认先查询总数count
Page<?> page =PageHelper.startPage(1, 20);
// 排序
PageHelper.orderBy("sessionId desc , id asc");
//只有紧跟在PageHelper.startPage方法后的第一个*Mybatis的查询Select*方法会被分页;后面的select不会被分页,除非再次调用PageHelper.startPage
list=coverageHistoryInfoDal.conditionalQuery(po);
//用PageInfo对结果进行包装
PageInfo pageInfo= new PageInfo(list);
//当前页
System.out.println(pageInfo.getPageNum());
//每页的数量
System.out.println(pageInfo.getPageSize());
//总记录数
System.out.println(page.getTotal()); // 这里需要注意!!!
//总页数
System.out.println(pageInfo.getPages());
// 是否有上一页
System.out.println(pageInfo.isHasPreviousPage());
// 是否有下一页
System.out.println(pageInfo.isHasNextPage());
//list是结果集
Object object=pageInfo.getList().get(0);
System.out.println(object);
四、前端可以配合使用这个js分页控件:http://www.jq22.com/jquery-info4510,或者直接使用bootstrap table,里面包含了分页功能(BootstrapTable 可以参考这篇文章 https://blog.csdn.net/javahighness/article/details/73929108)。