引言: PageHelper是國內很是優秀的一款開源的mybatis分頁插件,它支持基本主流與經常使用的數據庫, 例如mysql、 oracle、mariaDB、 DB二、 SQLite、Hsqldb等。今天墨白就給你們聊聊PageHelper這款分頁插件,下面是PageHelper開源地址,感興趣的小夥伴能夠去看一下 PageHelper在 github 的項目地址:java
1https://github.com/pagehelper/Mybatis-PageHelper
PageHelper在 gitosc 的項目地址:mysql
1 http://git.oschina.net/free/Mybatis_PageHelper>
先介紹一下這款插件PageHelper 官網地址:git
1https://pagehelper.github.io/
訪問官網後的頁面,官網裏面有詳細的Demo,今天咱們來照着官網本身動手敲個Demo; 如何使用PageHelper? 1.在本身的項目添加依賴,maven項目在父工程添加最新版本,最新版本是5.1.8github
1<dependency> 2 <groupid>com.github.pagehelper</groupid> 3 <artifactid>pagehelper</artifactid> 4 <version>5.1.8</version> 5</dependency>
2.在數據訪問層Spring 配置文件中配置攔截器插件,代碼以下spring
1<bean class="org.mybatis.spring.SqlSessionFactoryBean"> 2 <property name="dataSource" ref="dataSource" /> 3 <!--配置PageHelper攔截器插件--> 4 <property name="plugins"> 5 <array> 6 <bean class="com.github.pagehelper.PageInterceptor"> 7 <property name="properties"> 8 <value> 9 helperDialect=mysql 10 reasonable=true 11 </value> 12 </property> 13 </bean> 14 </array> 15 </property> 16 </bean>
3.PageHelper分頁插件參數介紹 這裏我只介紹兩個經常使用的,詳細的能夠去看官網API文檔 helperDialect: 分頁插件會自動檢測當前的數據庫連接,自動選擇合適的分頁方式。 你能夠配置helperDialect屬性來指定分頁插件使用哪一種方言。配置時,可使用下面的縮寫值 1oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby 特別注意:使用 SqlServer2012 數據庫時,須要手動指定爲 sqlserver2012,不然會使用 SqlServer2005 的方式進行分頁。你也能夠實現 AbstractHelperDialect,而後配置該屬性爲實現類的全限定名稱便可使用自定義的實現方法。 reasonable: 分頁合理化參數,默認值爲false。當該參數設置爲 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最後一頁。默認false 時,直接根據參數進行查詢。sql
4.在代碼中使用的兩種方式:數據庫
第一種mybatis
1// 此語句後的第一個select查詢自動會被分頁 2PageHelper.startPage(1, 10); 3// 這裏的查詢會自動分頁 4List<country> list = countryMapper.selectIf(1);
第二種oracle
1//獲取第1頁,10條內容,默認查詢總數count 2PageHelper.startPage(1, 10); 3List<country> list = countryMapper.selectAll(); 4//用PageInfo對結果進行包裝 5PageInfo page = new PageInfo(list); 6//測試PageInfo所有屬性 7//PageInfo源碼中能夠看到包含了很是全面的分頁屬性 8assertEquals(1, page.getPageNum()); 9assertEquals(10, page.getPageSize()); 10assertEquals(1, page.getStartRow()); 11assertEquals(10, page.getEndRow()); 12assertEquals(183, page.getTotal()); 13assertEquals(19, page.getPages()); 14assertEquals(1, page.getFirstPage()); 15assertEquals(8, page.getLastPage()); 16assertEquals(true, page.isFirstPage()); 17assertEquals(false, page.isLastPage()); 18assertEquals(false, page.isHasPreviousPage()); 19assertEquals(true, page.isHasNextPage());
使用PageHelper 配置好了上面的座標和Spring配置文件之後,咱們直接開始使用PageHelper,,每一個人的表數據可能都不同,你們根據需求本身來玩,代碼以下 Mapper接口app
1/** 2 * CompanyMapper接口 3*/ 4public interface CompanyMapper { 5 //查詢所有 6 List<company> findAll(); 7}
Mapper映射
1 <!--查詢所有--> 2 <select id="findAll" resultmap="BaseResultMap"> 3 select * from ss_company where companyId=#{companyId} 4</select>
Service接口
1public interface CompanyService { 2 // 分頁查詢 3 PageInfo<user> findByPage(int pageNum, int PageSize); 4 //查詢全部 5 List<company> findAll(); 6}
impl實現
1 // 注入Mapper 2 @Autowired 3 private CompanyMapper companyMapper; 4 5[@Override](https://my.oschina.net/u/1162528) 6public PageInfo<company> findByPage(int pageNum, int pageSize) { 7 // 開始分頁, PageHelper組件會自動對其後的第一條查詢查詢分頁 8 PageHelper.startPage(pageNum,pageSize); 9 // 調用dao查詢 10 List<company> list = companyMapper.findAll(); 11 // 建立PageInfo對象封裝分頁結果,傳入查詢集合。會自動計算分頁參數 12 PageInfo<company> pageInfo = new PageInfo<>(list); 13 return pageInfo; 14}
單元測試
1@RunWith(SpringJUnit4ClassRunner.class) 2@ContextConfiguration("classpath*:spring/applicationContext-*.xml") 3public class UserServiceImplTest { 4 // 注入service 5 @Autowired 6 private CompanyService companyMapper; 7 8 @Test 9 public void findByPage(){ 10 PageInfo<user> pageInfo = companyMapper.findByPage(1, 2); 11 System.out.println(pageInfo); 12 } 13}
測試結果: 控制器:每一個人的Controller都不同,我這裏給個模板大家,不明白的能夠在後臺留言,或者是在羣裏提問, 僅做參考:
1 @Autowired 2 private CompanyService companyService; 3 4 @RequestMapping("/***") 5 public ModelAndView findByPage( 6 @RequestParam(defaultValue = "1") int pageNum, 7 @RequestParam(defaultValue = "5") int pageSize) { 8 9 ModelAndView mv = new ModelAndView(); 10 mv.addObject("pageInfo",pageInfo); 11 mv.setViewName("詳情列表"); 12 return mv; 13 } 14}
今天的內容就到這裏了,加油!!!明天見 > 本文由公衆號【框架師 ,ID:mohu121】首發,轉載請註明出處</user></company></company></company></company></user></company></country></country>