大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
1、导入依赖(maven)
pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-mybatis.version}</version>
</dependency>
2、添加配置
aplication-dev.properties
#mybatis配置
mybatis.mapper-locations= classpath:mapper/**/*.xml
mybatis.type-aliases-package=com.powater.entity
# 数据库连接类型
# 插件配置 pagehelper
pagehelper.helperDialect=mysql
# 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页
pagehelper.reasonable=true
# 支持通过 Mapper 接口参数来传递分页参数
pagehelper.supportMethodsArguments=true
logging.level.com.powater.dao=debug
3、添加类Page
public class Page {
private Integer currentPage;
private Integer pageSize;
private Integer totalPage;
private Long totalSize;
public Page(Integer currentPage, Integer pageSize) {
this.currentPage = currentPage;
this.pageSize = pageSize;
}
public Integer getCurrentPage() {
return this.currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return this.pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalPage() {
return this.totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Long getTotalSize() {
return this.totalSize;
}
public void setTotalSize(Long totalSize) {
this.totalSize = totalSize;
}
}
4、添加类PageInfoListResult
import java.util.List;
public class PageInfoListResult<T> {
private List<T> dataList;
private Page page;
public PageInfoListResult() {
}
public List<T> getDataList() {
return this.dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
public Page getPage() {
return this.page;
}
public void setPage(Page page) {
this.page = page;
}
}
5、添加工具类中的方法
public class CommonUtil(){
public static <T> PageInfoListResult<T> makePageListResult(Page page, List<T> dataList) {
PageInfoListResult<T> pageInfoListResult = new PageInfoListResult();
//这是自己new的一个Page对象,用来存放分页信息
com.powater.common.bean.Page definePage = new com.powater.common.bean.Page(page.getPageNum(), page.getPageSize());
definePage.setTotalSize(page.getTotal());
definePage.setTotalPage(page.getPages());
pageInfoListResult.setDataList(dataList);
pageInfoListResult.setPage(definePage);
return pageInfoListResult;
}
}
6、在service层使用
@Override
public PageInfoListResult getFloodRecordList(RecordSearchBean recordSearchBean,int level,String userCode) {
//业务逻辑就不展示在这了 ,尽量简化代码,容易看懂,这里是一个固定的用法,
//PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
//RecordSearchBean类 (查询条件类)中有两个属性 ,currentPage当前页号,pageSize页面放多少条数据
//WaterForecastRecord 实体类
Page page = PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
//PageHelper下面紧跟着就进行数据的查询
List<WaterForecastRecord> list = waterForecastRecordMapper.selectRecordList(recordSearchBean);
//下面是将查到实体类中的数据转到WaterForecastRecordDTO 类中,因为我这mybatis sql语句返回的是WaterForecastRecord,如果sql语句返回的是WaterForecastRecordDTO就不用转,下面代码就用不到
/* if(list != null){ List<WaterForecastRecordDTO> waterForecastRecordDTOList = GeneralUtil.convertList(list,WaterForecastRecordDTO.class); return CommonUtil.makePageListResult(page,waterForecastRecordDTOList); } return null; */
return CommonUtil.makePageListResult(page,waterForecastRecordDTOList);
}
使用就是这些, 前端要传pageSize currentPage过来,后台controller层直接返回service返回的PageInfoListResult 就可以,下面记录下我在使用mybatis分页插件时碰到的一个问题
1、背景(直接上代码)
public class CommonUtil(){
public static <T> PageInfoListResult<T> makePageListResult(Integer currentPage, Integer pageSize, List<T> dataList) {
PageInfoListResult<T> pageInfoListResult = new PageInfoListResult();
Page page = new Page(currentPage, pageSize);
PageInfo pageInfo = new PageInfo(dataList);
page.setTotalPage(pageInfo.getPages());
page.setTotalSize(pageInfo.getTotal());
pageInfoListResult.setDataList(dataList);
pageInfoListResult.setPage(page);
return pageInfoListResult;
}
}
说明:原先我的工具类中分页方法是这样写的,自己new了一个page对象(看代码吧,感觉我也讲不太清)
service层
@Override
public PageInfoListResult getFloodRecordList(RecordSearchBean recordSearchBean,int level,String userCode) {
PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
//PageHelper下面紧跟着就进行数据的查询
List<WaterForecastRecord> list = waterForecastRecordMapper.selectRecordList(recordSearchBean);
if(list != null){
List<WaterForecastRecordDTO> waterForecastRecordDTOList = GeneralUtil.convertList(list,WaterForecastRecordDTO.class);
return CommonUtil.makePageListResult(page,waterForecastRecordDTOList);
}
return null;
}
说明:这是我当时的service层,从数据库中拿到了实体类的list,然后用GeneralUtil.convertList(list,WaterForecastRecordDTO.class);
这个方法将数据转移到waterForecastRecordDTOList 中,这个时候
PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());我是没有用Page接收的,
问题就是我对从数据库查到的数据进行了转移,在PageInfoListResult中放我从数据库中查到的数据是正常的,
但我放我转移后的list分页是有问题的,totalSize和数据库中符合条件数据数不符,
具体表现:currentPage:1 pageSize:10 (数据库中符合查询条件的数据有十二条),查询结果:totalSize:10 totalPage:1
currentPage:1 pageSize:20 (数据库中符合查询条件的数据有十二条),查询结果:totalSize:12 totalPage:1
但期望的结果是不管你传过来的currentPage,pageSize是多少,totalSize都应该是12(数据库中符合查询条件的数据数量),
经过一番努力:大概能猜到是什么原因
原因:在工具类中的方法中有这样有段代码 PageInfo pageInfo = new PageInfo(dataList);
这个dataList 是直接从数据库中查到的数据分页是没问题的,但换成了转移之后的list就有问题,问题大概就出现在查询数据这里了,具体不太了解
解决办法 :
PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());返回的是一个Page(分页信息在这个对象中)
可以用一个Page来接收分页参数,即:Page page = PageHelper.startPage(recordSearchBean.getCurrentPage(),recordSearchBean.getPageSize());
以此来保存分页信息,然后传到工具类的方法中进行处理,具体做法见最开始的分页插件使用方法
GeneralUtil类
public class GeneralUtil(){
public static <T, S> List<T> convertList(List<S> src, Class<T> targetType) {
List<T> target = new Vector();
Iterator var3 = src.iterator();
while(var3.hasNext()) {
S s = var3.next();
T t = BeanUtils.instantiateClass(targetType);
BeanUtils.copyProperties(s, t);
target.add(t);
}
return target;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194202.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...