Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)

今天下午在Mybatis项目中,实现分页。因为我是后加入项目中的,Leader用的是PageHelper这个组件,但是我在实际使用的过程中遇到了2个大问题。

1.http://www.oschina.net/news/53808/mybatis_pagehelper-3-2-2?p=2#comments
    在这篇文章中,作者有提到需要增加PageHelper的配置,原话“或者如果你使用Maven,你可以添加如下依赖:”

这句话是有问题的,
  <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"/>

    </plugin>

</plugins>
   这几段插件配置的代码,应该放到Mybatis的config配置文件中,而非Maven。
  
   后来,听Leader说,他在这也被误导了,搞了一天时间吧。

2. http://www.oschina.net/p/mybatis_pagehelper
   作者使用PageHelper的方法不太对,虽然Java后台测试是可以的,但是在FTL中显示的时候,EL表达式不能正常显示。

作者的代码:
   @Test

public void testPageHelperByStartPage() throws Exception {

    String logip = "";

    String username = "super";

    String loginDate = "";

    String exitDate = null;

    String logerr = null;

    //不进行count查询,第三个参数设为false

    PageHelper.startPage(110false);

    //返回结果是Page<SysLoginLog>    

    //该对象除了包含返回结果外,还包含了分页信息,可以直接按List使用

    List<SysLoginLog> logs = sysLoginLogMapper

            .findSysLoginLog(logip, username, loginDate, exitDate, logerr);

    Assert.assertEquals(10, logs.size());

    //当第三个参数没有或者为true的时候,进行count查询

    PageHelper.startPage(210);

    //返回结果是Page<SysLoginLog>    

    //该对象除了包含返回结果外,还包含了分页信息,可以直接按List使用

    Page<SysLoginLog> page = (Page<SysLoginLog>) sysLoginLogMapper

            .findSysLoginLog(logip, username, loginDate, exitDate, logerr);

    Assert.assertEquals(10, page.getResult().size());

    //进行count查询,返回结果total>0

    Assert.assertTrue(page.getTotal() > 0);

}

如果在Freemarker的FTL页面中,打印${page.pageNum}会报错,大致的意思是“expected a hash,but is a sequence”,
期待是hash类型,但实际上序列,list、ArrayList都算作序列。

这个地方情况比较特殊,Page是一个JavaBean,有若干属性,但是他又继承了ArrayList。经实际分析,
Freemarker把这个对象当作了ArrayList,可以直接遍历<#list page as item></#list>。

正确的方法应该是:http://www.oschina.net/news/53808/mybatis_pagehelper-3-2-2?p=2#comments

PageHelper.startPage(110);

List<Country> list = countryMapper.selectAll();

PageInfo page = new PageInfo(list);

assertEquals(10, list.size());

assertEquals(239, page.getTotal());

3.我的实际代码和效果



${page},

${page.pageNum}

打印结果:[email protected], 1

关键代码:

public PageInfo list(WithdrawForm form) {

PageHelper.startPage(form.getNumber(), form.getSize());

List<Map<String, Object>> list = withdrawDao.list(form);

PageInfo page = new PageInfo(list);

return page;

}

Leader在从网上寻找方法的时候,正好遇到了和采纳了这些不够科学的方法,他写的程序是可以运行的,有2点原因。
他没有在Maven中配置那个Plugin,而是在Mybatis中。出于其他需要,正好没有直接使用Page对象,而是使用自己组装的Bean。

今天遇到了这2个大问题,特意总结下,希望后来的人,不要再被误导了。

除了PageHelper这个分页插件,我在秒针工作的时候,原秒针Web前端高级工程师 现百度高级工程师,张少龙-默默,
他也自己实现了一个插件,今后再分享出来。

小雷FansUnion
2014年10月20日
湖北武汉

时间: 2024-08-14 03:22:20

Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)的相关文章

Mybatis分页插件PageHelper正确的用法(网上有2篇不够科学的文章)

今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" target="_blank" style="color: rgb(38, 112, 154); margin: 0px; padding: 0px; text-decoration: none;">http://www.oschina.net/news/5380

Mybatis分页插件PageHelper的配置和使用方法

http://www.cnblogs.com/kangoroo/p/7998433.html 前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计算count和分页逻辑,一般前端组件(例如dataTable)会提供分页动作. 特点是:简单,很适合小规模的web平台:当数据量大的时候会产生性能问题,在查询和网络传输的时间会很长. 后端分页 在aj

Mybatis分页插件PageHelper的使用

Mybatis分页插件 - PageHelper支持任何复杂的单表.多表分页.使用方法如下: 1.导入jar包 2.在Maven中添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </dependency> 3.在mybatis配置文件中配置插件 <?xml version="1.

Mybatis分页插件-PageHelper的使用

转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就不提了,我来说说我配置这个分页插件的过程吧. 下载JAR包 分页插件pagehelper.jar: https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/ http://repo

Mybatis分页插件PageHelper使用

一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map<String, Object> map); 2)mapper.xml: <select id="selectStudent" resultMap="BaseResultMap" parameterType="java.util.Map"

基于Mybatis分页插件PageHelper

基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 --><dependency>    <groupId>com.github.pagehelper</groupId>    <artifactId>pagehelper</artifactId>    <version>4.0.

MyBatis 分页插件PageHelper 后台报错

今天遇到一个问题,使用MyBatis 分页插件PageHelper 进行分页后,能正常返回正确的结果,但后台却一直在报错 net.sf.jsqlparser.parser.ParseException 具体错误信息如下所示: net.sf.jsqlparser.JSQLParserException at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:56) at com.github.pagehelp

springboot +mybatis分页插件PageHelper

1.问题描述 JAVA界ORM的两位大佬Hibernate和Mybatis,hb自带分页(上手挺快,以前用了好几年hb,后期运维及优化快疯了),mybatis没有分页功能,需要借助第三方插件来完成,比较流行的三方框架:PageHelper,今天结合springboot做下介绍,直接贴线上配置,保证可用(如有遗漏,朋友们可以指正下). 2. 解决方案 2.1 配置项目pom.xml <!--分页--> <dependency> <groupId>com.github.pa

使用Mybatis分页插件PageHelper时的分页问题

使用Mybatis分页插件PageHelper时的分页问题 1对1查询,分页正常 1对多查询,如使用左右连接查询则会导致结果的总记录条数,子记录条数会叠加到主记录条数,导致数据不对称. 总结:使用mybatis时,在一对多的查询并且需要分页的时候需要使用子查询形式. 1) 主记录的resultMap <resultMap id="artWorkMap" type="Artwork"> <id column="id" jdbcTy