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,你可以添加如下依赖:”

    这句话是有问题的,













    这几段插件配置的代码,应该放到Mybatis的config配置文件中,而非Maven。

    后来,听Leader说,他在这也被误导了,搞了一天时间吧。

    1. 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(1, 10, false);
      //返回结果是Page
      //该对象除了包含返回结果外,还包含了分页信息,可以直接按List使用
      List logs = sysLoginLogMapper
      .findSysLoginLog(logip, username, loginDate, exitDate, logerr);
      Assert.assertEquals(10, logs.size());

      //当第三个参数没有或者为true的时候,进行count查询
      PageHelper.startPage(2, 10);
      //返回结果是Page
      //该对象除了包含返回结果外,还包含了分页信息,可以直接按List使用
      Page page = (Page) 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(1, 10);
      List 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前端高级工程师 现百度高级工程师,张少龙-默默,
    他也自己实现了一个插件,今后再分享出来。

  • 相关阅读:
    函数作业1
    函数、装饰器、迭代器、内置方法总练习题
    疑问
    装饰器
    文件练习题1,2
    内置函数练习题和总结
    GET和POST请求的区别
    HTTP请求方法
    HTTP之状态码
    HTTP之响应消息Response
  • 原文地址:https://www.cnblogs.com/jpfss/p/6607904.html
Copyright © 2011-2022 走看看