mybatisPlus自带分页-PageHelper插件分页-自定义分页返回

1,237 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

mybatisPlus自带分页-PageHelper插件分页-自定义分页返回-之分页的三种写法

一、mybatisPlus的分页插件PageHelper进行分页代码示例:

1、分页组件-maven坐标依赖:

`

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.11</version>
    </dependency>
    
    `

1、使用如上依赖之后进行代码分页一般是没问题的,但请注意 PageInfo pageInfo = new PageInfo(list); 这行代码一定要紧跟在mapper查询后面。 如果PageInfo pageInfo = new PageInfo(list);这行代码写在了经过stream处理后的下面再设置,则获取到的total数量就是错误的。具体原理有待大神说明下(目前先把业务工作写完后续再说明)

2、而且使用stream流进行重新赋值,需要用该返回的list进行strea流重新赋值,如果还用通过mybaits查询的this.list(xxxQueryWrapper).stream就会使其他页数的数据还是第一页的数据;

3、代码示例适用于

`

    PageHelper.startPage(xxxVO.getCurrent(),xxxVO.getPageSize());
    QueryWrapper<Entity> xxxQueryWrapper = new QueryWrapper<>();
    
    dcwfResourceCountQueryWrapper.lambda().eq(Entity::getXxx,xxxVO.getXxx());
    
    List<Entity> list = this.list(xxxQueryWrapper);
    //这里一定注意,查询完之后紧跟分页
    PageInfo pageInfo = new PageInfo(list);
    //进行stream流映射处理
    List<entity> collect = list.stream().map(m -> {
        ...
        return entity;
    }).collect(Collectors.toList());

    pageInfo.setList(collect);
 
    return pageInfo;

`

二、mybatisPlus自带的分页插件两种写法:

1、写自定义的sql进行查询,入参VO和分页Page,返回参数是DTO

1.1、serviceImpl实现类

`

    public R pageListByCondition(AStoreVO vo) {
    IPage<Entity> page = new Page<>(vo.getCurrent(), vo.getSize());
    IPage<xxxDTO> iPage = xxxMapper.pageListByCondition(vo,page);
    return iPage;
    
}`

1.2、mapper接口

IPage<xxxDTO> pageListByCondition(@Param("vo") xxxVO vo, @Param("page") IPage<Entity> page);

1.3、mapper.xml映射配置文件sql写法

<select id="pageListByCondition" resultType="xxxDTO"></select>

三、最后的list通过自定义实体类分页返回

`

@Data
@ApiModel(value="对象",description = "xx")
class Page<T> {
    @ApiModelProperty(value = "分页页数")
    private Integer pageNum;
    @ApiModelProperty(value = "分页条数")
    private Integer pageSize;
    @ApiModelProperty(value = "得出的页数")
    private Integer totalPage;
    @ApiModelProperty(value = "得出的条数")
    private Integer total;
    @ApiModelProperty(value = "当前页数获取的数据")
    private List<T> list;}

`

`

    //自己分页返回
    List<xxx> collectResult = new ArrayList<>();
    Page<entity> page = new Page();
    page.setPageNum(param.getPageNum());
    page.setPageSize(param.getPageSize());
    page.setTotal(collect.size());
    //二、添加分页数据到数据库:总页数=总数量+每页数量-1/每页数量
    //公式:limit (currentPage-1),pageSize
    Integer totalPageNum = (collect.size()+param.getPageSize()-1)/param.getPageSize();
    page.setTotalPage(totalPageNum);
//设置分页数据
    int current = (param.getPageNum() > 1 ? (param.getPageNum() -1) * param.getPageSize() : 0);
    for (int i = 0; i < param.getPageSize() && i < collect.size() - current; i++) {
        Entity entity = collect.get(currIdx + i);
        collectResult.add(auditList);
    }
    page.setList(collectResult);
    return page;`