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

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

大家好,又见面了,我是全栈君。

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

 1.
    在这篇文章中。作者有提到须要添加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(
1

10

false
);
    
//返回结果是Page<SysLoginLog>    
    
//该对象除了包括返回结果外。还包括了分页信息,能够直接按List使用
    
List<SysLoginLog> logs = sysLoginLogMapper
            
.findSysLoginLog(logip, username, loginDate, exitDate, logerr);
    
Assert.assertEquals(
10
, logs.size());
 
    
//当第三个參数没有或者为true的时候,进行count查询
    
PageHelper.startPage(
2

10
);
    
//返回结果是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>。

     正确的方法应该是:

   
PageHelper.startPage(
1

10
);

List<Country> list = countryMapper.selectAll();
PageInfo page = 
new 
PageInfo(list);
assertEquals(
10
, list.size());

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115764.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • hashmap基本原理_哈希表的实现原理

    hashmap基本原理_哈希表的实现原理HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。  首先HashMap里面实现一个静态内部类Entry,其重要的属性有key,value,next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Ent

    2022年10月23日
  • dos2unix命令将dos文件转换为unix格式

    dos2unix命令将dos文件转换为unix格式使用git的时候碰到git将unix换行符转换为windows换行符的问题,需要使用dos2unix命令将文件转换为unix格式。dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MACtoUNIXtextfileformatconverter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D0A。而Unix下的文本文件是以\n作为断行

  • vuex mapGetters的使用「建议收藏」

    vuex mapGetters的使用「建议收藏」importVuefrom’vue’;importVuexfrom’vuex’;Vue.use(Vuex);conststore=newVuex.Store({state:{name:’张三’,number:0,list:[{id:1,name:’111′},{id:2,name:’222′},{id:3,

  • 什么是bin文件?「建议收藏」

    什么是bin文件?「建议收藏」出现这样的问题:未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。原因可能是:1.路径不正确;2.文件不存在。相信大家都遇到这样的问题了,我和大家一样按照常规的方法:把DAL的路径改到E:\4.平时记录\UI\机房重构\UI\bin\Debug下面了,一般这样就可以解决了。但是,我的没有解决。bin\Debug下面仍让没有有关DAL的dll文件。不

  • WiFi频段_wifi工作频段

    WiFi频段_wifi工作频段我们知道wifi2.4G和5G是一个电磁波承载的信息。那莫他们各自所能用到的最大资源是多少呢?2.4G->2.4GHz~2.485GHz共83.5MHz的资源,我们频道的划分是以五Mhz为一个channel资源。5G->一般从5170~52505250~53305490~57305735~5835其中5170~5250是36~485250~5330是52~645490~5730是100~1445735~58…

    2022年10月20日
  • IIS服务器实现跨域调用「建议收藏」

    IIS服务器实现跨域调用「建议收藏」今天用JS实现了一下ajax请求,本地作为服务器,但是请求的时候总是提示跨域,google了一下,都是说在服务器添加“Access-Control-Allow-Origin”,开始误以为是在服务器得html页面添加,后来才知道是在服务器中添加打开IIS,找到“HTTP响应标头”点进去,在右侧可以看到添加,然后添加如下标头即可Access-Control-Allow-Headers:Content-…

    2022年10月21日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号