今天下午在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前端高级工程师 现百度高级工程师,张少龙-默默,

他也自己实现了一个插件,今后再分享出来。

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

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

    今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" ...

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

     Mybatis分页插件PageHelper的配置和使用方法 前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分 ...

  3. Mybatis学习---Mybatis分页插件 - PageHelper

    1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...

  4. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  5. Java SSM框架之MyBatis3(三)Mybatis分页插件PageHelper

    引言 对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写count和select ...

  6. 基于Mybatis分页插件PageHelper

    基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 ...

  7. Mybatis分页插件-PageHelper的使用

    转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就 ...

  8. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示

    http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...

  9. springmvc mybatis 分页插件 pagehelper

    springmvc mybatis 分页插件 pagehelper 下载地址:pagehelper 4.2.1 , jsqlparser 0.9.5 https://github.com/pagehe ...

随机推荐

  1. 详解Android Activity---启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  2. Andorid源码系列:View的onTouchEvent()与performClick(),performLongClick()调用时机解析

    这是大土豆的第一篇博客,想着工作3年多了,在工作上从一名菜鸟逐渐成长为在项目中能干点事的人,自己对Android的见解也一步步加深,有必要写一些对Android代码和开发过程中的感悟,和广大朋友们分享 ...

  3. RecyclerView线性分割线

    由于recyclerview默认是没有分割线的,需要显示分割线的话,可以在布局里添加一条有背景色的View标签,或者通过ItemDecoration来实现,本文以后者为例. ItemDecoratio ...

  4. java定时任务的实现方式

    在本文里,我会给大家介绍2种不同的实现方法:1.普通thread实现2.ScheduledExecutorService实现 一:实现普通的thread: 首先是创建thread然后就是一直让whil ...

  5. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  6. java 读取文件的路径

    1. 通用定位到用户目录下:   String userDir = System.getProperty("user.dir"); 2. web项目定位到WEB-INF/class ...

  7. angularjs2 ng2 密码隐藏显示

    代码结合ionic2开发移动端项目,注册页的密码的input一般用password, 但是用户输入密码时可能会输入错误,需要显示成text. 如图: 首先,输入框的类型判断: <ion-inpu ...

  8. 3624: [Apio2008]免费道路

    Description Input Output Sample Input 5 7 2 1 3 0 4 5 1 3 2 0 5 3 1 4 3 0 1 2 1 4 2 1 Sample Output ...

  9. vue错误和解决方法

    1.Error in render function: "TypeError: Cannot read property 'matched' of undefined 原因:之前不知道,在引 ...

  10. Uva140 Bandwidth 全排列+生成测试法+剪枝

    参考过仰望高端玩家的小清新的代码... 思路:1.按字典序对输入的字符串抽取字符,id[字母]=编号,id[编号]=字母,形成双射       2.邻接表用两个vector存储,存储相邻关系     ...