场景需求:旧版mybatis分页的,要单独写一个获取总数的方法和查询一模一样(早就看它不顺眼),索性升级一下
。
。过程中也碰到了不少死胡同(想把自己打死)
。但是使用很简单……真的很简单,请看这哥子的文章
。
说明:旧版是SpringMVC和mybatis,只是在基础上加了PageHelper
开始,废话不多说
1、引入jar
(申明:版本跟mybatis版本有关,在maven repository看下面依赖说明,找到自己合适的包)
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
2、在mybatis-config.xml中配置分页插件
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
3、好的,开始操练:
3.1、旧代码如下(数据结果和总数,需要查询两次):
@Override
public void findBrandDataGrid(PageInfo pageInfo) {
pageInfo.setRows(brandMapper.findBrandDataGrid(pageInfo));
pageInfo.setTotal(brandMapper.findBrandCount(pageInfo));
}
3.2、改进使用pageHelper(切记,去掉mapper xml中sql查询的分页参数,原因:pagehelper会自动拼接limit分页参数)
public void findBrandDataGrid(PageInfo pageInfo) {
Page<List> page = PageHelper.startPage(pageInfo.getNowpage(), pageInfo.getSize());
List result = brandMapper.findBrandDataGrid(pageInfo);
pageInfo.setTotal((int) page.getTotal());
pageInfo.setRows(result);
}
调试看看sql,如图
4、致命问题,说明:
1、由于easyui需要,原本系统封装了一个PageInfo(玛德,这个和PageHelper这个PageInfo命名一模一样,所以被挂死在这里大半天<希望大伙不要像我一样傻逼,被这两个PageInfo搞团团转,他们是两个毫不相干的东西,虽然里面内容有点相似>)
easyui特定数据格式:{total:"100",rows:[{"id":"1" , "name":"aaa"},{"id":"2" , "name":"bbb"}]}
所以还是将通过PageHelper查询的结果和总数,放入旧的结果集中:
pageInfoSelf.setTotal((int) page.getTotal());
pageInfoSelf.setRows(result);
2、第二个蛋疼问题是,pagehelper只查询总数,不查询结果集(感谢文章)
原因是PageHelper.startPage(start, limit);——————start从1开始
3、我估计会遇到,有条件的查询获取总数会有问题……后面再试试