基於SpringBoot項目MyBatis分頁插件實現分頁總結
前言
在使用Mybatis時,最頭痛的就是寫分頁了,需要先寫一個查詢count的select語句,然後再寫一個真正分頁查詢的語句,當查詢條件多了之後,會發現真的不想花雙倍的時間寫 count 和 select,幸好我們有 pagehelper 分頁插件,pagehelper 是一個強大實用的 MyBatis 分頁插件,可以幫助我們快速的實現MyBatis分頁功能,而且pagehelper有個優點是,分頁和Mapper.xml完全解耦,並以插件的形式實現,對Mybatis執行的流程進行了強化,這有效的避免了我們需要直接寫分頁SQL語句來實現分頁功能。
現在我把自己在項目中實現分頁的方法總結如下:
1.導入Maven依賴
<!--分頁插件-->
<!-- //mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
2.controller中分頁方法
/**
* @Description: 分頁查詢
* @Param: waterloggingPreventionDto
* @return com.graphsafe.api.msg.RestMessage(封裝的返回值資訊)
* @author songwp
* @date 2021/11/2 15:00
*/
@PostMapping(value = "getListForPage", produces = "application/json;charset=UTF-8")
public RestMessage getListForPage(@RequestBody WaterloggingPreventionDto waterloggingPreventionDto){
WaterloggingPreventionVo result = new WaterloggingPreventionVo();
List<WaterloggingPrevention> list = waterloggingPreventionService.getListForPage(waterloggingPreventionDto);
result.setWaterloggingPreventionList(list);
if (null != waterloggingPreventionDto.getCount()){
result.setTotal(waterloggingPreventionDto.getCount().intValue());
}
return new RestMessage(result);
}
3.service業務方法的實現
@Override
public List<WaterloggingPrevention> getListForPage(WaterloggingPreventionDto waterloggingPreventionDto) {
List<WaterloggingPrevention> list = new ArrayList<>();
if (waterloggingPreventionDto.getPage() != null && waterloggingPreventionDto.getLimit() != null){
PageHelper.startPage(waterloggingPreventionDto.getPage(),waterloggingPreventionDto.getLimit());
list = waterloggingPreventionMapper.getListForPage(waterloggingPreventionDto);
PageInfo<WaterloggingPrevention> pageInfo = new PageInfo<>(list);
waterloggingPreventionDto.setCount(pageInfo.getTotal());
}else {
list = waterloggingPreventionMapper.getListForPage(waterloggingPreventionDto);
}
return list;
}
4.serviceye業務方法介面
/**
* @Description:
* @ClassName: WaterloggingPreventionService
* @Author: songwp
* @Date: 2021/10/16 13:35
*/
public interface WaterloggingPreventionService {
List<WaterloggingPrevention> getListForPage(WaterloggingPreventionDto waterloggingPreventionDto);
}
5.Mapper方法介面
/**
* @Description:
* @ClassName: WaterloggingPreventionMapper
* @Author: songwp
* @Date: 2021/10/16 13:30
*/
@Mapper
public interface WaterloggingPreventionMapper {
List<WaterloggingPrevention> getListForPage(WaterloggingPreventionDto waterloggingPreventionDto);
}
6.參數實體類
/**
* @author songwp
* @Description:
* @date 2021/10/29:47
*/
@Data
public class WaterloggingPreventionDto {
@ApiModelProperty(value = "名稱")
private String name;
//分頁
@ApiModelProperty(value = "當前頁碼")
private Integer page; //當前頁第一頁是0
@ApiModelProperty(value = "每頁條數")
private Integer limit;//每頁步長
@ApiModelProperty(value = "總條數")
private Long count;//總條數
}
7.post數據測試分頁展示: