MyBatis分页插件:

引入pagehelp pom文件:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>

只需要一句编码即可实现分页:

    ResponseVo<List<ProductVo>> list(Integer categoryId,Integer pageNum,Integer pageSize){
        Set<Integer> categoryIdSet = new HashSet<>();
        if(categoryId!=null) {
            categoryService.findSubCategoryId(categoryId, categoryIdSet);
            categoryIdSet.add(categoryId);
        }
        //只需传入pageNum和pageSize即可完成分页
        PageHelper.startPage(pageNum,pageSize);

        List<ProductVo> productVos = productMapper.selectByCategoryIdSet(categoryIdSet);
        //构建分页返回完整信息
        PageInfo pageInfo = new PageInfo(productVos);  //查询的对象
        pageInfo.setList(productVos);  //返回的Vo对象
        return ResponseVo.successByCommonData(productVos);
    }

此分页插件原理是我们在执行配置中拦截器多执行了内容,分析了我们的sql语句,先执行了“select count(0) from 表明 where 判断条件”。查出一共多少条数据,在完成封装。

自定义分页结构体实现分页

实现分页实体类

@Data
@ApiModel("分页查询")
public class PageBean<T> {
    @ApiModelProperty("数据总数")
    private long total;
    @ApiModelProperty("当前页码")
    private int pageNum;
    @ApiModelProperty("总页数")
    private int pages;
    @ApiModelProperty("数据列表")
    private T result;
}

使用实例:

@Service
public class ScheduleItemService {

    @Autowired
    private MeetStatusRepository meetStatusRepository;

    //传入分页数据和pageNum,pageSize,自行计算实现分页
    private List queryPaging(List dataList, int pageNum, int pageSize) {
        List list = new ArrayList<>();
        if (dataList != null && dataList.size() > 0) {
            list = (List) dataList.stream().skip(pageSize * (pageNum - 1)).limit(pageSize).collect(Collectors.toList());
        }
        return list;
    }

    public PageBean<List<MeetStatusVO>> getMeetStatus(String meetStatus, int pageNum, int pageSize) {
        List<MeetStatusDTO> list = meetStatusRepository.getMeetStatus(meetStatus);
        List<MeetStatusVO> collect = list.stream().map(MeetStatusVO::new).collect(Collectors.toList());

        //封装PageBean结构体返回
        PageBean<List<MeetStatusVO>> pageBean = new PageBean<>();
        pageBean.setTotal(collect.size());
        pageBean.setPageNum(pageNum);
        pageBean.setPages(collect.size() % pageSize > 0 ? collect.size() / pageSize + 1 : collect.size() / pageSize);
        collect = queryPaging(collect, pageNum, pageSize);
        pageBean.setResult(collect);

        return pageBean;
    }
}

sql传入实现分页

    /**
     *通过sql语句进行分页
     */
    @Override
    public List<User> selectUserBySql(int currentPage, int pageSize) {
        Map<String,Object> map=new HashMap<>();
        int startCurrentPage=(currentPage-1)*pageSize;        //从第几个数据开始
        int count=selectCount();
        int totalPage=count/pageSize;                   //总页数
        if (currentPage>totalPage || currentPage<=0){
            return null;
        }else{
            map.put("currentPage",startCurrentPage);
            map.put("pageSize",pageSize);
            List<User> list = userMapper.selectBySql(map);
            return list;
        }
    }

 sql查询实现:

    @Select(select count(*) from user)
    int selectCount();    

    @Select("select * from user limit #{currentPage} , #{pageSize}")
    List<User> selectBySql(Map<String, Object> map);
Or:
    <select id="selectCount" resultType="integer">
    select count(*) from user
    </select>

    <select id="selectBySql" parameterType="map" resultType="com.hao.springboot.entity.User">
    select * from user limit #{currentPage} , #{pageSize}
    </select>

mybatis拦截器分页底层

(五)SpringBoot配置mybatis分页拦截器_lanhezhong的博客-CSDN博客_springboot分页拦截器

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐