今天下午在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/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>。

正确的方法应该是:

p=2#comments" target="_blank" style="color: rgb(38, 112, 154); margin: 0px; padding: 0px; text-decoration: none;">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日
湖北武汉

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

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

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

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

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

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

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

  4. 基于Mybatis分页插件PageHelper

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

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

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

  6. MyBatis 分页插件PageHelper 后台报错

    今天遇到一个问题,使用MyBatis 分页插件PageHelper 进行排序分页后,能正常返回正确的结果,但后台却一直在报错 net.sf.jsqlparser.parser.ParseExcepti ...

  7. Mybatis分页插件PageHelper使用

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

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

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

  9. Mybatis分页插件PageHelper的实现

    Mybatis分页插件PageHelper的实现 前言 分页这个概念在做web网站的时候很多都会碰到 说它简单吧 其实也简单 小型的网站,完全可以自己写一个,首先查出数据库总条数,然后按照分页大小分为 ...

随机推荐

  1. Ftp实现文件同步

    通常在做服务器与服务器文件.服务器与本地文件同步时通过Ftp服务实现,下面就以服务器文件和本地同步为例,介绍一下Ftp同步文件:首先建立一个Ftp站点服务,基本身份验证登陆,端口号为默认的21:Ftp ...

  2. Droppable(放置)组件

    .加载方式 //class 加载方式 <div id="dd" class="easyui-droppable" data-options="a ...

  3. C#、.NET和ASP.NET三者之间的区别

    刚毕业后出去找工作面试的时候就遇到这个问题!.回答不上来.回来网上查的如下: 那么 .NET.C#和ASP.NET这三者之间区别不清楚,到底它们之间有什么联系呢? 1..NET是一个平台,一个抽象的平 ...

  4. C#Socket 案例

    服务器端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  5. POJ 1159

    区间dp 比如从i到j如果str[i] == str[j]那么i到j的值就与i+1到j-1相同,否则从i到j-1与i+1到j中选一个最优解,这道题直接定义int的二维数组会mle,用short,也可以 ...

  6. php时间戳与时间转换

    PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4) 所以存到数据库也有两种形式了(真正不止,我的应用就两种),时间戳类型我是保存为字符串的,这个是 ...

  7. 乱七八糟Nodejs系列二:线程模型

    上一篇中说了这样一句话:Nodejs和浏览器javascript一样,都是单线程,所以和传统的不一样,这个后面有机会再说.挖了坑就得填,哎. 1.一个例子 来看一个例子,这个例子来自async jav ...

  8. jQuery学习资源参考教程网址推荐

    jQuery官方主页:http://jquery.comjQuery中文入门指南:http://www.k99k.com/jQuery_getting_started.htmljQuery使用手册:h ...

  9. android手机获取手机号

    最近做到一个项目,需要获取手机号.项目中使用的手机卡为电信卡,那么就以此为例吧. 网上不符合需求的方法 Google了一下,网上的做法如下: //获取手机号码 TelephonyManager tm  ...

  10. 完美解决android软键盘监听

    最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收 ...