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分页拦截器