今天下午在Mybatis项目中。实现分页。由于我是后加入项目中的,Leader用的是PageHelper这个组件。可是我在实际使用的过程中遇到了2个大问题。
1.http://www.oschina.net/news/53808/mybatis_pagehelper-3-2-2?
在这篇文章中。作者有提到须要添加PageHelper的配置,原话“或者假设你使用Maven,你能够加入例如以下依赖:”
这句话是有问题的,
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(
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>。
正确的方法应该是:http://www.oschina.net/news/53808/mybatis_pagehelper-3-2-2?p=2#comments
Leader在从网上寻找方法的时候。正好遇到了和採纳了这些不够科学的方法,他写的程序是能够执行的,有2点原因。
他没有在Maven中配置那个Plugin,而是在Mybatis中。出于其它须要,正好没有直接使用Page对象,而是使用自己组装的Bean。
今天遇到了这2个大问题。特意总结下,希望后来的人,不要再被误导了。
除了PageHelper这个分页插件,我在秒针工作的时候,原秒针Web前端高级project师 现百度高级project师,张少龙-默默。
他也自己实现了一个插件,今后再分享出来。
小雷FansUnion
2014年10月20日
湖北武汉
假设在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<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
关键代码:
打印结果: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日
湖北武汉