Mybatis分页插件 - PageHelper很好很强大,转载

1.引入分页插件

1.引入Jar包

如果你想使用本项目的jar包而不是直接引入类,你可以在这里下载各个版本的jar包(点击Download下的jar即可下载)


由于使用了sql解析工具,你还需要下载jsqlparser.jar(这个文件完全独立,不依赖其他):


2. 在Mybatis配置xml中配置拦截器插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!-- 这个地方要注意,放到你mybatis的配置文件xml里的时候,这个插件所对应的位置。
      
     plugins ----在配置文件中的位置必须符合要求,否则会报错,顺序如下:----
     properties?, settings?, 
     typeAliases?, typeHandlers?, 
     objectFactory?,objectWrapperFactory?, 
     plugins?, -----应该放在此处-----
     environments?, databaseIdProvider?, mappers?
-->
< plugins >
     <!-- com.github.pagehelper为PageHelper类所在包名 -->
     < plugin  interceptor = "com.github.pagehelper.PageHelper" >
         < property  name = "dialect"  value = "mysql" />
         <!-- 该参数默认为false -->
         <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
         <!-- 和startPage中的pageNum效果一样-->
         < property  name = "offsetAsPageNum"  value = "true" />
         <!-- 该参数默认为false -->
         <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
         < property  name = "rowBoundsWithCount"  value = "true" />
         <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
         <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
         < property  name = "pageSizeZero"  value = "true" />
         <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
         <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
         <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
         < property  name = "reasonable"  value = "true" />
         <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
         <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
         <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
         <!-- 不理解该含义的前提下,不要随便复制该配置 -->
         < property  name = "params"  value = "pageNum=start;pageSize=limit;" />
     </ plugin >
</ plugins >

3. 在Mybatis配置xml中配置拦截器插件:

如何在代码中使用

 

首先该分页插件支持以下两种调用方式:

//第一种,RowBounds方式的调用

List<XXX> list = sqlSession.selectList("<-- xxx.xml当中的配置id -->", null, new RowBounds(1, 10));


//第二种,Mapper接口方式的调用,推荐这种使用方式。

//小弟深深感受到了面向接口编程神奇之处。各位大大见笑了。

PageHelper.startPage(1, 10);List<Country> list = countryMapper.selectIf(1);



为何要用此插件?

mybatis提供的分页效率低

Select * from user limit #{p1},#{p2}传统的分页有何不足之处?

Select * from user limit #{p1},#{p2} mybatis内部在看到jdbc的Resultset对象时,用游标定位offset的位置,只处理limit条记录。

场景:当数据库105万条数据,1万1页,我要查第一百页,那就是第1000001到条1010000条,使用这种分页查询,先是查询全部105万条,然后截取所对应页码的记录,效率不行。


主要工作原理是什么?

这个我大体上知道那么回事,真正让我追本溯源现在还没有那个实力。

主要思想:拦截handleResultSets方法来获取最后的处理结果。


如果要在Spring里面集成这个分页插件,请浏览原文。

http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown



欢迎指正,欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值