今天下午在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說,他在這也被誤導了,搞了一天時間吧。
-
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使用
Listlogs = sysLoginLogMapper
.findSysLoginLog(logip, username, loginDate, exitDate, logerr);
Assert.assertEquals(10, logs.size());//當第三個參數沒有或者為true的時候,進行count查詢
PageHelper.startPage(2, 10);
//返回結果是Page
//該對象除了包含返回結果外,還包含了分頁信息,可以直接按List使用
Pagepage = (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);
Listlist = 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前端高級工程師 現百度高級工程師,張少龍-默默,
他也自己實現了一個插件,今后再分享出來。
