背景
项目中使用的是Mybatis没有使用jpa,而前端和app端都有懒加载,下拉刷新的请求,需要对查询的数据进行分页查询。原有的mybatis都已经正常使用,现在只需要增加PageHelper来对查询的数据进行分页。
环境
Java 1.8
springboot 2.2.6
mybatis-spring-boot-starter 1.3.2
...
新增
pagehelper-spring-boot-starter 1.2.3
Maven配置
增加tk mapper需要用到的依赖包
<!--pagehelper 分页-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
实践
第一步:增加pagehelper的配置文件
配置文件新增
##################################################
##
## 分页配置
##
##################################################
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
helperDialect使用数据库的语义
supportMethodsArguments支持pageNum,pageSize分页参数,自动分页。
第二步:源码中使用
在查询中使用 PageHelper.startPage(page, pageSize),实际分页后,分页的数据也需要组织,分页数据类,在网上也找到了一个比较好的类。参看后面的代码
查询实现代码:
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public PagedGridResult queryPageComments(Integer itemId, Integer level,
Integer page, Integer pageSize)
{
Map<String, Object> map = new HashMap<>();
map.put("itemId", itemId);
map.put("level", level);
PageHelper.startPage(page, pageSize);
List<ItemCommentVO> itemCommentVOList = itemsMapper.selectItemComments(map);
for(ItemCommentVO vo : itemCommentVOList){
vo.setNickname(DesensitizationUtils.chineseName(vo.getNickname()));
}
return setterPagedGrid(itemCommentVOList, page);
}
/**
* 分页处理函数
*/
private PagedGridResult setterPagedGrid(List<?> list, Integer page)
{
PageInfo<?> pageList = new PageInfo<>(list);
PagedGridResult gridResult = new PagedGridResult();
gridResult.setPage(page);
gridResult.setRows(list);
gridResult.setTotal(pageList.getPages());
gridResult.setRecords(pageList.getTotal());
return gridResult;
}
分页数据格式化类:
package com.springboot.b2c.utils;
import java.util.List;
/**
*分页Grid数据对象
*/
public class PagedGridResult {
//当前页数
private Integer page;
//总页数
private Integer total;
//总记录数
private Long records;
//每行显示内容
private List<?> rows;
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public Long getRecords() {
return records;
}
public void setRecords(Long records) {
this.records = records;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
网友评论