Spring Boot 2.0 + MyBatis + pageHelper 多元資料庫分頁
繼之前在MyBatis設定多元資料的情況下,在工作中又遇到了多元資料庫分頁失效的問題,如下是解決過程。
這裡先貼上我之前解決多元資料的部落格:https://blog.csdn.net/jiangxiaoyi_07/article/details/84982875
先介紹只有一個數據源的情況下pageHelper的使用方法。
首先,在啟動類上加上如下程式碼
@Bean PageHelper pageHelper(){ //分頁外掛 PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("reasonable", "true"); properties.setProperty("supportMethodsArguments", "true"); properties.setProperty("returnPageInfo", "check"); properties.setProperty("params", "count=countSql"); pageHelper.setProperties(properties); //新增外掛 new SqlSessionFactoryBean().setPlugins(new Interceptor[]{pageHelper}); return pageHelper; }
helperDialect:分頁外掛會自動檢測當前的資料庫連結,自動選擇合適的分頁方式。
reasonable:分頁合理化引數,預設值為false。當該引數設定為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最後一頁。預設false 時,直接根據引數進行查詢。
params:為了支援startPage(Object params)方法,增加了該引數來配置引數對映,用於從物件中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置對映的用預設值, 預設值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
supportMethodsArguments:支援通過 Mapper 介面引數來傳遞分頁引數,預設值false,分頁外掛會從查詢方法的引數值中,自動根據上面 params 配置的欄位中取值,查詢到合適的值時就會自動分頁。
在需要分頁的sql語句上一行加入,注意一定不要中間插入其他的程式碼
Page page = PageHelper.startPage(pageNum, pageSize); ArrayList<Target> targets = targetMapper.findTargetsByClientId(clientId, pageNum, pageSize);
這時獲取到的結果已經是分頁後的結果啦~
PageInfo<Target> targetPage = new PageInfo<>(targets);
targetPage.setPages(page.getPages());
targetPage.setTotal(page.getTotal());
targetPage.setPageNum(page.getPageNum());
targetPage.setPageSize(page.getPageSize());
然後將分頁相關的結果放到PageInfo物件裡。
在配置了兩個資料庫源後,分別有如下的兩個資料庫配置檔案,具體的可以看之前多元資料的部落格,文章開頭已經貼出來過。
注掉在單資料庫源的情況下載啟動類上加上的分頁相關的程式碼,
然後分別在MybatisDbAConfig和MybatisDbBConfig檔案加入如下的程式碼
@Bean
public SqlSessionFactory sqlSessionFactory1() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(xx1DataDataSource());//使用xx1DataDataSource()為資料來源
//分頁外掛
Interceptor interceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("params", "pageNum=pageNumKey;pageSize=pageSizeKey;");
interceptor.setProperties(properties);
factoryBean.setPlugins(new Interceptor[]{interceptor});
return factoryBean.getObject();
}
其他的使用方法和之前的單源資料庫的情況是一樣的了。
使用了PageHelper外掛之後除了基礎的查詢語句之外不需要關心分頁語句,因為Mybatis 的攔截器在輸入的sql語句之外拼接了分頁先關的語句。