持续创作,加速成长!这是我参与「掘金日新计划 · 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;`