zoukankan      html  css  js  c++  java
  • 基于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数据测试分页展示:


    古今成大事者,不唯有超世之才,必有坚韧不拔之志!
  • 相关阅读:
    git客户端
    Autowired注解的妙用---在Controller里的构造函数里获取需要注入的对象
    面向对象的理解
    改变对update的做法
    时间戳与日期相互转换
    Git随记
    json数据传输有感
    Mybatis的批量CRUD
    并发与线程有感
    dpkg --info
  • 原文地址:https://www.cnblogs.com/songwp/p/15503972.html
Copyright © 2011-2022 走看看