1. 程式人生 > 其它 >基於SpringBoot專案MyBatis分頁外掛實現分頁總結

基於SpringBoot專案MyBatis分頁外掛實現分頁總結

前言

在使用Mybatis時,最頭痛的就是寫分頁了,需要先寫一個查詢count的select語句,然後再寫一個真正分頁查詢的語句,當查詢條件多了之後,會發現真的不想花雙倍的時間寫 count 和 select,幸好我們有 pagehelper 分頁外掛,pagehelper 是一個強大實用的 MyBatis 分頁外掛,可以幫助我們快速的實現MyBatis分頁功能,而且pagehelper有個優點是,分頁和Mapper.xml完全解耦,並以外掛的形式實現,對Mybatis執行的流程進行了強化,這有效的避免了我們需要直接寫分頁SQL語句來實現分頁功能。
現在我把自己在專案中實現分頁的方法總結如下:

1.匯入Maven依賴

<!--分頁外掛-->
<!-- https://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資料測試分頁展示:


古今成大事者,不唯有超世之才,必有堅韌不拔之志!