PageHelper--Mybatis分页插件(ssm框架下的使用)
1.导入PageHelper依赖
<!-- MyBatis 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.0.0</version> </dependency>
2.配置PageHelper插件
注意:om.github.pagehelper.PageHelper这个接口,自4.0.0版本以后就不再使用了,转而实现这个接口:org.apache.ibatis.plugin.Interceptor。由于我使用的是4.0.0版本,所以还是用的PageHelper。
方式一:在mybatis的主配置文件中配置PageHelper插件
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> <property name="offsetAsPageNum" value="true"/> <property name="rowBoundsWithCount" value="true"/> <property name="pageSizeZero" value="true"/> <property name="reasonable" value="true"/> <property name="params" value="pageNum=start;pageSize=limit;"/> <property name="supportMethodsArguments" value="true"/> <property name="returnPageInfo" value="check"/> </plugin> </plugins> </configuration>
属性说明:
dialect(常用):指定当前使用的数据库 。pagehelper版本4.0.0以后可以不设置此属性。
offsetAsPageNum:设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用,默认为false。
rowBoundsWithCount:设置为true时,使用RowBounds分页会进行count查询,默认为false。
pageSizeZero:设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)。
reasonable(常用):分页参数合理化,设置为true时,如果pageNum<1会查询第一页,如果pageNum>最大页数时会查询最后一页;禁用合理化时,如果pageNum<1或pageNum>最大页数时会返回空数据。默认为false禁用(3.3.0之后版本可用)。
params:增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值。可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值。不理解该含义的前提下,不要随便复制该配置 (3.5.0版本可用,为了支持startPage(Object params)方法)
supportMethodsArguments:支持通过Mapper接口参数来传递分页参数。
returnPageInfo:always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page。
记得在spring的配置文件的sqlSessionFactory中指定mybatis全局配置文件位置。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定mybatis全局配置文件位置--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--指定mapper.xml配置文件路径--> <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/> <!--装配数据源--> <property name="dataSource" ref="dataSource"/> </bean>
方式二:直接在spring主配置文件中配置PageHelper插件(没有mybatis的主配置文件使用此方式)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定mybatis全局配置文件位置--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--指定mapper.xml配置文件路径--> <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/> <!--装配数据源--> <property name="dataSource" ref="dataSource"/> <!--配置插件--> <property name="plugins"> <array> <!--配置PageHelper插件--> <bean class="com.github.pagehelper.PageHelper"> <property name="properties"> <props> <!--配置数据库方言,告诉 PageHelper当前使用的数据库--> <prop key="dialect">mysql</prop> <!--配置页码的合理化修正,在1~总页数之间修正页码--> <!--合理化修正--> <prop key="reasonable">true</prop> </props> </property> </bean> </array> </property> </bean>
3.使用
在执行查询之前调用PageHelper的静态方法:PageHelper.startPage(pageNum,pageSize)即可,pagehelper自动对PageHelper.startPage 方法下的第一个sql 查询进行分页。
此方法两个参数:
pageNum:当前页码
pageSize:每页显示的条数
代码举例:
@Test public void test2(){ PageHelper.startPage(2,10); List<Admin> list = adminMapper.selectAdminByKeyword(""); for (Admin admin : list) { System.out.println(admin); } }
输出: