分页查询的两种方法

97 阅读1分钟

一、分页查询的一般方法

  1. 定义一个分类类型的实体

    /**
     * 封装分页查询结果
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class PageResult implements Serializable {
    
        private long total; //总记录数
    
        private List records; //当前页数据集合
    
    }
    
  2. 在controller使用分页方法,由于方法比较简单就不展示

  3. 在serviceimpl层编写逻辑:

     public PageBean page(Integer pageTotal, Integer pageSize) {
            //1.获取总记录数
            Long total = empMapper.getTotal();
            //2.获取数据列表
            pageTotal = (pageTotal - 1) * pageSize;
            List<Emp> rows = empMapper.getrows(pageTotal,pageSize);
            //3.封装数据
            PageBean pageBean = new PageBean();
            pageBean.setTotal(total);
            pageBean.setRows(rows);
            return pageBean;
        }
    
  4. mapper层

    /**
         * 先获取总条数
         * @return
        @Select("select count(*) from emp")
        public Long getTotal();
    
    
    /**
         * 然后获取列表数据
         * @return
         */
        @Select("select * from emp limit #{pageTotal},#{pageSize}")
        List<Emp> getrows(Integer pageTotal, Integer pageSize);
    

二、使用分页插件的方法

  1. 使用分页插件需要引入依赖:

    不同版本的Jdk适用不同版本,需要注意版本错误

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.7</version>
    </dependency>
    
  2. controller与mapper代码与方法一相同

  3. servoceimpl中使用以下代码(代码基本固定)

    public PageResult page(SetmealPageQueryDTO setmealPageQueryDTO) {
        //调用分页创建,获取总条数和当前页数
        PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
        //调用固定方法封装
        Page<SetmealVO> page = setmealMapper.page(setmealPageQueryDTO);
        //数据的封装
        long total = page.getTotal();
        List<SetmealVO> records = page.getResult();
    
    	//返回封装的数据
        return new PageResult(total,records);
    }