今天下午在Mybatis項目中。實現分頁。由於我是后加入項目中的,Leader用的是PageHelper這個組件。可是我在實際使用的過程中遇到了2個大問題。
1. http://www.oschina.net/news/53808/mybatis_pagehelper-3-2-2?
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日
湖北武漢
