springboot實現MyBatis分頁
阿新 • • 發佈:2022-05-21
原文連結: https://www.jianshu.com/p/5f15474ac4c5
1.在 pom.xml 檔案中新增分頁外掛依賴包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2.application.yml 配置檔案中新增分頁外掛有關的配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
3.編寫分頁程式碼
1)DAO層新增selectPage方法
package com.zgjy.dao;
import com.zgjy.entity.SysUser;
import com.zgjy.entity.OrderInfo;
import com.zgjy.entity.orderInfoExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface OrderInfoMapper {
int countByExample(orderInfoExample example);
int deleteByExample(orderInfoExample example);
int insert(OrderInfo record);
int insertSelective(OrderInfo record);
List<OrderInfo> selectByExample(orderInfoExample example);
int updateByExampleSelective(@Param("record") OrderInfo record, @Param("example") orderInfoExample example);
int updateByExample(@Param("record") OrderInfo record, @Param("example") orderInfoExample example);
/**
* 查詢全部訂單
* @return
*/
List<OrderInfo> selectAll();
/**
* 分頁查詢訂單
* @return
*/
List<OrderInfo> selectPage();
}
2)OrderInfoMapper.xml 中加入selectPage的實現
<select id="selectPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from dwd_fact_order
</select>
3)服務層通過呼叫DAO層程式碼完成分頁查詢,這裡統一封裝分頁查詢的請求和結果類,從而避免因為替換ORM框架而導致服務層、控制層的分頁介面也需要變動的情況,替換ORM框架也不會影響服務層以上的分頁介面,起到了解耦的作用。
package com.zgjy.service;
import com.zgjy.entity.OrderInfo;
import com.zgjy.util.PageRequest;
import com.zgjy.util.PageResult;
import java.util.List;
public interface OrderInfoService {
/**
* 查詢所有使用者
* @return
*/
List<OrderInfo> findAll();
/**
* 分頁查詢介面
* 這裡統一封裝了分頁請求和結果,避免直接引入具體框架的分頁物件, 如MyBatis或JPA的分頁物件
* 從而避免因為替換ORM框架而導致服務層、控制層的分頁介面也需要變動的情況,替換ORM框架也不會
* 影響服務層以上的分頁介面,起到了解耦的作用
* @param pageRequest 自定義,統一分頁查詢請求
* @return PageResult 自定義,統一分頁查詢結果
*/
PageResult findPage(PageRequest pageRequest);
}
4)服務實現類通過呼叫分頁外掛完成最終的分頁查詢,關鍵程式碼是 PageHelper.startPage(pageNum, pageSize),將前臺分頁查詢引數傳入並攔截MyBtis執行實現分頁效果。
package com.zgjy.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zgjy.dao.OrderInfoMapper;
import com.zgjy.entity.OrderInfo;
import com.zgjy.entity.SysUser;
import com.zgjy.service.OrderInfoService;
import com.zgjy.util.PageRequest;
import com.zgjy.util.PageResult;
import com.zgjy.util.PageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrderInfoMapper orderInfoMapper;
@Override
public List<OrderInfo> findAll() {
return orderInfoMapper.selectAll();
}
@Override
public PageResult findPage(PageRequest pageRequest) {
return PageUtils.getPageResult(pageRequest,getPageInfo(pageRequest));
}
/**
* 呼叫分頁外掛完成分頁
* @param pageRequest
* @return
*/
private PageInfo<?> getPageInfo(PageRequest pageRequest) {
int pageNum = pageRequest.getPageNum();
int pageSize = pageRequest.getPageSize();
PageHelper.startPage(pageNum,pageSize);
List<OrderInfo> sysMenus = orderInfoMapper.selectPage();
return new PageInfo<>(sysMenus);
}
}
5)在控制器SysUserController中新增分頁查詢方法,並呼叫服務層的分頁查詢方法。
package com.zgjy.controller;
import com.zgjy.service.OrderInfoService;
import com.zgjy.util.PageRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("order")
public class OrderInfoController {
@Autowired
private OrderInfoService orderInfoService;
@GetMapping(value = "findAll")
public Object findAll(){
return orderInfoService.findAll();
}
@PostMapping(value="/findPage")
public Object findPage(@RequestBody PageRequest pageQuery) {
return orderInfoService.findPage(pageQuery);
}
}
分頁查詢請求封裝類。
PageRequest.java
package com.zgjy.util;
import lombok.Getter;
import lombok.Setter;
/**
* 分頁請求
*/
@Setter
@Getter
public class PageRequest {
/**
* 當前頁碼
*/
private int pageNum;
/**
* 每頁數量
*/
private int pageSize;
}
分頁查詢結果封裝類。
PageResult.java
package com.zgjy.util;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Setter
@Getter
public class PageResult {
/**
* 當前頁碼
*/
private int pageNum;
/**
* 每頁數量
*/
private int pageSize;
/**
* 記錄總數
*/
private long totalSize;
/**
* 頁碼總數
*/
private int totalPages;
/**
* 資料模型
*/
private List<?> content;
}
分頁查詢相關工具類。
PageUtils.java
package com.zgjy.util;
import com.github.pagehelper.PageInfo;
public class PageUtils {
/**
* 將分頁資訊封裝到統一的介面
* @param pageRequest
* @param pageInfo
* @return
*/
public static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo){
PageResult pageResult = new PageResult();
pageResult.setPageNum(pageInfo.getPageNum());
pageResult.setPageSize(pageInfo.getPageSize());
pageResult.setTotalSize(pageInfo.getTotal());
pageResult.setTotalPages(pageInfo.getPages());
pageResult.setContent(pageInfo.getList());
return pageResult;
}
}
4.啟動應用,訪問:localhost:8088/swagger-ui.html,找到對應介面,模擬測試,結果如下。
引數:pageNum: 1, pageSize: 5
0人點贊 日記本