一:關於分頁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);}
}
但是視訊教學中說到,分頁外掛對逆向工程生成的程式碼支援不好,不能對有查詢條件的查詢分頁。會拋異常。
所以需要使用它修改過的版本。