帶你學習最簡單的分頁插件PageHelper

  • 2019 年 11 月 10 日
  • 筆記

正文

引言:

PageHelper是中國非常優秀的一款開源的mybatis分頁插件,它支援基本主流與常用的資料庫, 例如mysql、 oracle、mariaDB、 DB2、 SQLite、Hsqldb等。今天墨白就給大家聊聊PageHelper這款分頁插件,下面是PageHelper開源地址,感興趣的小夥伴可以去看一下

  • PageHelper在 github 的項目地址:
https://github.com/pagehelper/Mybatis-PageHelper
  1. 先介紹一下這款插件PageHelper
  • 官網地址:
https://pagehelper.github.io/
  • 訪問官網後的頁面,官網裡面有詳細的Demo,今天我們來照著官網自己動手敲個Demo;
  • 如何使用PageHelper?

1.在自己的項目添加依賴,maven項目在父工程添加最新版本,最新版本是5.1.8

1<dependency>  2    <groupId>com.github.pagehelper</groupId>  3    <artifactId>pagehelper</artifactId>  4    <version>5.1.8</version>  5</dependency>

2.在數據訪問層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 時,直接根據參數進行查詢。

4.在程式碼中使用的兩種方式:

  • 第一種
1// 此語句後的第一個select查詢自動會被分頁  2PageHelper.startPage(1, 10);  3// 這裡的查詢會自動分頁  4List<Country> list = countryMapper.selectIf(1);
  • 第二種
 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介面
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   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}

Tags: