Spring插件之PageHelper(⼀)的配置
⼀、简介
⼆、依赖导⼊
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
三、插件配置
3.1. 在 MyBatis 配置 xml 中配置插件
<!--
plugins在配置⽂件中的位置必须符合要求,否则会报错,顺序如下:    properties?, settings?,    typeAliases?, typeHandlers?,  objectFactory?,objectWrapp -->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使⽤下⾯的⽅式配置参数,后⾯会有所有的参数介绍 -->
<property name="param1"value="value1"/>
</plugin>
</plugins>
3.2. 在 Spring 配置⽂件中配置插件
使⽤ spring 的属性配置⽅式,可以使⽤ plugins 属性像下⾯这样配置:
<bean id="sqlSessionFactory"class="batis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使⽤下⾯的⽅式配置参数,⼀⾏配置⼀个 -->
<value>            params=value1
</value>
</property>
</bean></array>
</property>
</bean>
3.3 零配置⽅案配置
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource da) {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(da);
//设置分页的
PageInterceptor pageInterceptor = new PageInterceptor();
//创建插件需要的参数集合
Properties properties = new Properties();
//配置数据库⽅⾔为oracle
properties.setProperty("helperDialect", "oracle");
//配置分页的合理化数据
properties.setProperty("reasonable", "true");
pageInterceptor.setProperties(properties);
//将设置到sqlSessionFactroy中
sqlSessionFactoryBean.setPlugins(new Interceptor[] {pageInterceptor});
return sqlSessionFactoryBean;
}
四分页插件参数介绍
  1. helperDialect :分页插件会⾃动检测当前的数据库链接,⾃动选择合适的分页⽅式。 你可以配置 helperDialect 属性来指定分页插件使⽤哪种⽅⾔。配置时,可以使⽤下⾯的缩写值:
  oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver2012 , derby
  特别注意:使⽤ SqlServer2012 数据库时,需要⼿动指定为 sqlserver2012 ,否则会使⽤ SqlServer2005 的⽅式进⾏分页。 你也可以实现 AbstractHelperDialect ,然后配置该属性为实现类的全限定名称即可使⽤⾃定义的实现⽅法。
   2. offsetAsPageNum :默认值为 false ,该参数对使⽤ RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将RowBounds 中的 offset 参数当成 pageNum 使⽤,可以⽤页码和页⾯⼤⼩两个参数进⾏分页。
   3. rowBoundsWithCount :默认值为 false ,该参数对使⽤ RowBounds 作为分页参数时有效。当该参数设置为 true 时,使⽤RowBounds 分页会进⾏ count 查询。
   4. pageSizeZero :默认值为 false ,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执⾏分页查询,但是返回结果仍然是 Page 类型)。
   5. reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第⼀页,
pageNum>pages (超过总数时),会查询最后⼀页。默认 false 时,直接根据参数进⾏查询。
   6. params :为了⽀持 startPage(Object params) ⽅法,增加了该参数来配置参数映射,⽤于从对象中根据属性名取值, 可以配置pageNum,pageSize,count,pageSizeZero,reasonable ,不配置映射的⽤默认值, 默认值为
pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero= pageSizeZero 。
   7. supportMethodsArguments :⽀持通过 Mapper 接⼝参数来传递分页参数,默认值 false ,分页插件会从查询⽅法的参数值中,⾃动根据上⾯ params 配置的字段中取值,查到合适的
值时就会⾃动分页。 使⽤⽅法可以参考测试代码中的 com.st.basic 包
下的 ArgumentsMapTest 和 ArgumentsObjTest 。
   8. autoRuntimeDialect :默认值为 false 。设置为 true 时,允许在运⾏时根据多数据源⾃动识别对应⽅⾔的分页 (不⽀持⾃动选择 sqlserver2012 ,只能使⽤ sqlserver ),⽤法和注意事项参考下⾯的场景五。
   9. closeConn :默认值为 true 。当使⽤运⾏时动态数据源或没有设置 helperDialect 属性⾃动获取数据库类型时,会⾃动获取⼀个数据库连接, 通过该属性来设置是否关闭获取的这个连接,默认 true 关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据⾃⼰选择的数据源来决定。
五、.基本使⽤
PageHelper的基本使⽤有6种,⼤家可以查看⽂档,最常⽤的有两种
5.1. RowBounds⽅式的调⽤(了解)
   List list = sqlSession.selectList(“x.y.selectIf”, null, new RowBounds(1, 10));
使⽤这种调⽤⽅式时,你可以使⽤RowBounds参数进⾏分页,这种⽅式侵⼊性最⼩,我们可以看到,通过RowBounds⽅式调⽤只是使⽤了这个参数,并没有增加其他任何内容。分页插件检测到使⽤了RowBounds参数时,就会对该查询进⾏物理分页。
关于这种⽅式的调⽤,有两个特殊的参数是针对 RowBounds 的,你可以参看上⾯的分页插件参数介绍
注:不只有命名空间⽅式可以⽤RowBounds,使⽤接⼝的时候也可以增加RowBounds参数,例如:
//这种情况下也会进⾏物理分页查询
List<Country> selectAll(RowBounds rowBounds);
注意: 由于默认情况下的 RowBounds ⽆法获取查询总数,分页插件提供了⼀个继承⾃
RowBounds 的 PageRowBounds ,这个对象中增加了 total 属性,执⾏分页查询后,可以从该属
性得到查询总数。分页查询插件
5.2. PageHelper.startPage 静态⽅法调⽤(重点)
  这种⽅式是我们要掌握的 在你需要进⾏分页的 MyBatis 查询⽅法前调⽤PageHelper.startPage 静态⽅法即可,紧跟在这个⽅法后的第⼀个MyBatis 查询⽅法会被进⾏分页。
//在调⽤dao前的业务层⽅法使⽤
public PageInfo findAllProduct(Integer pageNum,Integer pageSize){
//获取第pageNum页,pageSize条内容,默认查询总数count
PageHelper.startPage(pageNum, pageSize);
//紧跟着的第⼀个select⽅法会被分页
List<Product> products = productDao.findAllProduct();
PageInfo pageInfo = new PageInfo(products);
return pageInfo;
};
六、PageHelper使⽤总结
PageHelper使⽤只需要三步
1.导⼊jar包(maven⼯程直接引⼊对应坐标)
2.配置插件给mybaitis(和spring整合后,可以直接将插件属性配置给sqlsessinoFactoryBean,),配置好后⼯⼚在创建sqlSession时候会为我们载⼊配置
3.使⽤时调⽤⽅法,常见⽅式是,在service中,执⾏dao查询对应查询⽅法之前,调⽤分页的静态⽅法PageHelper.startPage

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。