天天看點

Mybatis分頁助手PageHelper

作者:奮發雲朵ft

簡單使用

官網:https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter

在官網可以檢視PageHelper的maven坐标

①導入通用PageHelper的坐标

②在mybatis核心配置檔案中配置PageHelper插件

③測試分頁資料擷取

①導入通用PageHelper坐标

<dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper-spring-boot-starter</artifactId>
     <version>1.4.1</version>
 </dependency>           

②在application.properties核心配置檔案中配置PageHelper插件

# 設定分頁插件
 #pagehelper分頁插件配置
 pagehelper.helperDialect=mysql
 pagehelper.reasonable=true
 pagehelper.supportMethodsArguments=true
 pagehelper.params=count=countSql           

properties頁面詳解

  • dialect:使用時必須指定該屬性,可選值為oracle,mysql,mariadb,sqlite,hsqldb,postgresql,沒有預設值,必須指定該屬性。
  • reasonable:配置分頁參數合理化功能,預設是false。 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>總頁數會查詢最後一頁; #禁用合理化時,如果pageNum<1或pageNum>總頁數會傳回空資料。
  • support-methods-arguments:支援通過Mapper接口參數來傳遞分頁參數,預設值false,分頁插件會從查
  • 查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合适的值時就會自動分頁。
  • params:為了支援startPage(Object params)方法,增加了該參數來配置參數映射,用于從對象中根據屬性名取值; 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用預設值, 預設值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

測試環境

@Test
 public void testPageHelper() {
     //設定分頁參數
     PageHelper.startPage(1,2);
     //設定查找到的資料集合,這邊要調用查詢所有資料的方法
     List<admin> select = adminMapper.findAll();
     //其他分頁的資料,第二個參數可選,表示導航頁顯示幾個
     PageInfo<admin> pageInfo = new PageInfo<>(select,5);
     //分頁相關參數
     System.out.println("總條數:"+pageInfo.getTotal());
     System.out.println("總頁數:"+pageInfo.getPages());
     System.out.println("目前頁:"+pageInfo.getPageNum());
     System.out.println("目前頁顯示的真實條數:"+pageInfo.getSize());
     System.out.println("每頁顯示長度:"+pageInfo.getPageSize());
     System.out.println("是否第一頁:"+pageInfo.isIsFirstPage());
     System.out.println("是否最後一頁:"+pageInfo.isIsLastPage());
     System.out.println("下一頁的頁碼:"+pageInfo.getNextPage());
     System.out.println("上一頁的頁碼:"+pageInfo.getPrePage());
     System.out.println("是否存在上一頁:"+pageInfo.isHasPreviousPage());
     System.out.println("是否存在下一頁:"+pageInfo.isHasNextPage());
     System.out.println("導航分頁的頁碼數,就是上面設定的5:"+pageInfo.getNavigatePages());
     System.out.println("導航分頁的頁碼:"+ 
     Arrays.toString(pageInfo.getNavigatepageNums()));
     System.out.println(pageInfo.getList());
 }           
Mybatis分頁助手PageHelper

其實最後pageInfo.getList()可以擷取大部分内容,如下

Page{
     count=true, 
     pageNum=1, 
     pageSize=2, 
     startRow=0, 
     endRow=2, 
     total=7, 
     pages=4, 
     reasonable=true, 
     pageSizeZero=false
 }
 [admin(id=4, username=張三, password=4321), admin(id=5, username=李四, password=21321)]           

整合SpringBoot

Mapper

@Repository
 //加上MapperScan之後就無需再寫@Mapper
 public interface adminMapper {
    //注解開發
     @Select("select * from admin")
     //查找所有資料
     List<admin> findAll();
 }           

service層

接口

public interface adminService {
     Map<String, Object> findAll(int pageNum,int pageSize);
 }           

實作類

@Service
 public class adminServiceImpl implements adminService {
     @Resource
     private adminMapper adminMapper;
 
     @Override
     public Map<String,Object> findAll(int pageNum,int pageSize) {
         PageHelper.startPage(pageNum,pageSize);
         List<admin> select = adminMapper.findAll();
         PageInfo<admin> pageInfo = new PageInfo<>(select,5);
         Map<String, Object> map = new HashMap<>();
         map.put("total",pageInfo.getTotal());
         map.put("pages",pageInfo.getPages());
         map.put("data",pageInfo.getList());
         map.put("size",pageInfo.getSize());
         map.put("pageSize",pageInfo.getPageSize());
         map.put("isIsFirstPage",pageInfo.isIsFirstPage());
         map.put("isIsLastPage",pageInfo.isIsLastPage());
         map.put("nextPage",pageInfo.getNextPage());
         map.put("prePage",pageInfo.getPrePage());
         map.put("isHasPreviousPage",pageInfo.isHasPreviousPage());
         map.put("isHasNextPage",pageInfo.isHasNextPage());
         return map;
     }
 }           

controller

@Resource
 private adminService adminService;
 
 //查找所有資料
 @GetMapping("findAll/{pageNum}/{pageSize}")
 public Map<String, Object> findAll(@PathVariable int pageNum,
                            @PathVariable int pageSize){
     return  adminService.findAll(pageNum,pageSize);
 }           

運作結果

輸入4,2,目前頁面最後一頁

傳回内容

Mybatis分頁助手PageHelper

繼續閱讀