Mybatis分頁插件PageHelper正確的使用方法(網上有2篇不夠科學的文章)


今天下午在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說,他在這也被誤導了,搞了一天時間吧。

  1. 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使用
    List logs = sysLoginLogMapper
    .findSysLoginLog(logip, username, loginDate, exitDate, logerr);
    Assert.assertEquals(10, logs.size());

    //當第三個參數沒有或者為true的時候,進行count查詢
    PageHelper.startPage(2, 10);
    //返回結果是Page
    //該對象除了包含返回結果外,還包含了分頁信息,可以直接按List使用
    Page page = (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);
    List 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前端高級工程師 現百度高級工程師,張少龍-默默,
他也自己實現了一個插件,今后再分享出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM