引言:
PageHelper是國(guó)內(nèi)非常優(yōu)秀的一款開(kāi)源的mybatis分頁(yè)插件,它支持基本主流與常用的數(shù)據(jù)庫(kù), 例如mysql双霍、 oracle、mariaDB批销、 DB2洒闸、 SQLite、Hsqldb等均芽。今天墨白就給大家聊聊PageHelper這款分頁(yè)插件,下面是PageHelper開(kāi)源地址,感興趣的小伙伴可以去看一下
PageHelper在 github 的項(xiàng)目地址:
1https://github.com/pagehelper/Mybatis-PageHelper
PageHelper在 gitosc 的項(xiàng)目地址:
1 http://git.oschina.net/free/Mybatis_PageHelper>
先介紹一下這款插件PageHelper
官網(wǎng)地址:
1https://pagehelper.github.io/
訪問(wèn)官網(wǎng)后的頁(yè)面,官網(wǎng)里面有詳細(xì)的Demo,今天我們來(lái)照著官網(wǎng)自己動(dòng)手敲個(gè)Demo;
如何使用PageHelper?
1.在自己的項(xiàng)目添加依賴,maven項(xiàng)目在父工程添加最新版本,最新版本是5.1.8
1<dependency>
2 <groupId>com.github.pagehelper</groupId>
3 <artifactId>pagehelper</artifactId>
4 <version>5.1.8</version>
5</dependency>
2.在數(shù)據(jù)訪問(wèn)層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分頁(yè)插件參數(shù)介紹
這里我只介紹兩個(gè)常用的,詳細(xì)的可以去看官網(wǎng)API文檔
helperDialect:
分頁(yè)插件會(huì)自動(dòng)檢測(cè)當(dāng)前的數(shù)據(jù)庫(kù)鏈接丘逸,自動(dòng)選擇合適的分頁(yè)方式。 你可以配置helperDialect屬性來(lái)指定分頁(yè)插件使用哪種方言掀宋。配置時(shí)深纲,可以使用下面的縮寫值
1oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
特別注意:使用 SqlServer2012 數(shù)據(jù)庫(kù)時(shí),需要手動(dòng)指定為 sqlserver2012劲妙,否則會(huì)使用 SqlServer2005 的方式進(jìn)行分頁(yè)湃鹊。你也可以實(shí)現(xiàn) AbstractHelperDialect,然后配置該屬性為實(shí)現(xiàn)類的全限定名稱即可使用自定義的實(shí)現(xiàn)方法镣奋。
reasonable:
分頁(yè)合理化參數(shù)币呵,默認(rèn)值為false。當(dāng)該參數(shù)設(shè)置為 true 時(shí)侨颈,pageNum<=0 時(shí)會(huì)查詢第一頁(yè)余赢, pageNum>pages(超過(guò)總數(shù)時(shí))芯义,會(huì)查詢最后一頁(yè)。默認(rèn)false 時(shí)妻柒,直接根據(jù)參數(shù)進(jìn)行查詢扛拨。
4.在代碼中使用的兩種方式:
第一種
1// 此語(yǔ)句后的第一個(gè)select查詢自動(dòng)會(huì)被分頁(yè)
2PageHelper.startPage(1, 10);
3// 這里的查詢會(huì)自動(dòng)分頁(yè)
4List<Country> list = countryMapper.selectIf(1);
第二種
1//獲取第1頁(yè),10條內(nèi)容举塔,默認(rèn)查詢總數(shù)count
2PageHelper.startPage(1, 10);
3List<Country> list = countryMapper.selectAll();
4//用PageInfo對(duì)結(jié)果進(jìn)行包裝
5PageInfo page = new PageInfo(list);
6//測(cè)試PageInfo全部屬性
7//PageInfo源碼中可以看到包含了非常全面的分頁(yè)屬性
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
配置好了上面的坐標(biāo)和Spring配置文件以后,我們直接開(kāi)始使用PageHelper,,每個(gè)人的表數(shù)據(jù)可能都不一樣,大家根據(jù)需求自己來(lái)玩,代碼如下
Mapper接口
1/**
2 * CompanyMapper接口
3*/
4public interface CompanyMapper {
5 //查詢?nèi)?6 List<Company> findAll();
7}
Mapper映射
1 <!--查詢?nèi)?->
2 <select id="findAll" resultMap="BaseResultMap">
3 select * from ss_company where companyId=#{companyId}
4</select>
Service接口
1public interface CompanyService {
2 // 分頁(yè)查詢
3 PageInfo<User> findByPage(int pageNum, int PageSize);
4 //查詢所有
5 List<Company> findAll();
6}
impl實(shí)現(xiàn)
1 // 注入Mapper
2 @Autowired
3 private CompanyMapper companyMapper;
4
5@Override
6public PageInfo<Company> findByPage(int pageNum, int pageSize) {
7 // 開(kāi)始分頁(yè), PageHelper組件會(huì)自動(dòng)對(duì)其后的第一條查詢查詢分頁(yè)
8 PageHelper.startPage(pageNum,pageSize);
9 // 調(diào)用dao查詢
10 List<Company> list = companyMapper.findAll();
11 // 創(chuàng)建PageInfo對(duì)象封裝分頁(yè)結(jié)果鬼癣,傳入查詢集合。會(huì)自動(dòng)計(jì)算分頁(yè)參數(shù)
12 PageInfo<Company> pageInfo = new PageInfo<>(list);
13 return pageInfo;
14}
單元測(cè)試
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}
測(cè)試結(jié)果:
控制器:每個(gè)人的Controller都不一樣,我這里給個(gè)模板你們,不明白的可以在后臺(tái)留言,或者是在群里提問(wèn),
僅作參考:
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}
今天的內(nèi)容就到這里了,加油F》贰4骸!明天見(jiàn)
本文由公眾號(hào)【框架師 痹屹,ID:mohu121】首發(fā)章郁,轉(zhuǎn)載請(qǐng)注明出處