1. 程式人生 > >一:關於分頁PageHelper的思考

一:關於分頁PageHelper的思考

今天在寫淘淘商城的時候,淘淘商城介紹了一種全新的分頁寫法,我想到了到現在為止,我看到過三種分頁方式,所以寫一寫,將我看到的分頁方式原理總結一下,或許其中存在極大的耦合性:

一:mvc模式下的分頁

  mvc中使用一個寫好的PageModel去裝載,model中記錄了當前頁,上/下一頁,總頁數等引數,並且用一定的演算法,使得只需要輸入當前頁和總頁數,就能得到所有的資料,最後,在DBHelper的方法中傳入PageModel引數,在sql語句中用limit限制,實現分頁

 

二:ssr專案中的分頁

   實習中遇到的ssr專案,從action中開始,傳入pageInfo這個實體類,類似於mvc模式下的分頁,在到層的xxxDaoImp中,將引數pageInfo作為param傳入到sql中

舉例:    public List<AdminPojo> getAdminPojoListByPage(AdminQuery adminQuery,
            PageInfo pageInfo) {
        Hashtable<String, Object> param = new Hashtable<String, Object>();
        if (pageInfo != null && pageInfo.getSkip() != null) {
            param.put("skip", pageInfo.getSkip());
        }
        if (pageInfo != null && pageInfo.getPageSize() != null) {
            param.put("pageSize", pageInfo.getPageSize());
        }
        return this.smcTemplate.queryForList(
                "sqlmap_admin_lz_cc.getAdminPojoListByPage", param);
    }

 

三:淘淘商城的分頁

淘淘商城的分頁寫法是,匯入了gitHub官網的pageHelper外掛(在MyBatis的xml配置檔案中新增plugins),這個外掛的原理是實現了MyBatis的interceptor介面,擴充套件了MyBatis的功能。這樣就可以在外掛中獲得sql語句,為sql語句新增限制條件

測試類如下:

public class TestPageHelper {

@Test

public void testPageHelper() {

//建立一個spring容器

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");

//從spring容器中獲得Mapper的代理物件

TbItemMapper mapper = applicationContext.getBean(TbItemMapper.class);

//執行查詢,並分頁

TbItemExample example = new TbItemExample();

//分頁處理

PageHelper.startPage(2, 10);

List<TbItem> list = mapper.selectByExample(example);

//取商品列表

for (TbItem tbItem : list) {

System.out.println(tbItem.getTitle());

}

//取分頁資訊

PageInfo<TbItem> pageInfo = new PageInfo<>(list);

long total = pageInfo.getTotal();

System.out.println("共有商品:"+ total);}

}

 

但是視訊教學中說到,分頁外掛對逆向工程生成的程式碼支援不好,不能對有查詢條件的查詢分頁。會拋異常。

所以需要使用它修改過的版本。