1、Maven配置
com.github.pagehelper
pagehelper
3.4.2
com.github.jsqlparser
jsqlparser
0.9.1
2、在Mybatis配置xml中配置拦截器插件
这里的com.github.pagehelper.PageHelper使用完整的类路径。
其他五个参数说明:
增加dialect属性,使用时必须指定该属性,可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,没有默认值,必须指定该属性。
增加offsetAsPageNum属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页时,会将offset参数当成pageNum使用,可以用页码和页面大小两个参数进行分页。
增加rowBoundsWithCount属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页会进行count查询。
增加pageSizeZero属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)。
增加reasonable属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。具体作用请看上面配置文件中的注释内容。
3、Spring配置方法
1、mybatis默认的xml配置
参考 2、在Mybatis配置xml中配置拦截器插件
2、使用spring的属性配置方式
使用spring的属性配置方式,可以使用plugins属性像下面这样配置:
classpath:mapper/*.xml
dialect=hsqldb
reasonable=true
属性配置按照上面的方式配置,每个配置独立一行即可。
4、如何在代码中使用
首先该分页插件支持以下两种调用方式:
//第一种,RowBounds方式的调用
List list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(1, 10));
//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List list = countryMapper.selectIf(1);
1 RowBounds方式的调用
List list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(1, 10));
//这种情况下也会进行物理分页查询
List selectAll(RowBounds rowBounds);
2、PageHelper.startPage静态方法调用
public void m1() {
//从xml配置文件创建spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext*.xml");
//从spring容器获取TbItemMapper的代理对象
TbItemMapper mapper = applicationContext.getBean(TbItemMapper.class);
//执行查询,分页
TbItemExample tbItemExample = new TbItemExample();
//分页处理
PageHelper.startPage(1, 10);
List tbItems = mapper.selectByExample(tbItemExample);
//取商品列表
for (TbItem item : tbItems) {
System.out.println(item.getTitle());
}
//取分页信息
PageInfo tbItemPageInfo = new PageInfo<>(tbItems);
long total = tbItemPageInfo.getTotal();
System.out.println("共有信息 " + total);
}
5、重要提示
1、PageHelper.startPage方法重要提示
只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select方法)方法会被分页。
2、分页插件不支持带有for update语句的分页
对于带有for update的sql,会抛出运行时异常,对于这样的sql建议手动分页,毕竟这样的sql需要重视。
3、分页插件不支持关联结果查询
原因以及解决方法可以看这里:
http://my.oschina.net/flags/blog/274000
分支插件不支持关联结果查询,但是支持关联嵌套查询。只会对主sql进行分页,嵌套的sql不会被分页
6、作者链接