zoukankan      html  css  js  c++  java
  • 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}

    打印结果:
    com.github.pagehelper.PageInfo@125d70de, 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前端高级project师 现百度高级project师,
    张少龙-默默。
    他也自己实现了一个插件,今后再分享出来。


    小雷FansUnion
    2014年10月20日
    湖北武汉
  • 相关阅读:
    0909 作业
    20190909 pycharm快捷键与变量
    20190906 计算机基础
    0905 计算机组成原理
    day 08 作业
    20190902 函数
    20190827 文件操作
    获取多段线上圆弧的中心点 半径
    读取ini配置文件
    CStatic设置位图
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5250828.html
Copyright © 2011-2022 走看看