Springboot中使用mybatis分页插件
2019-03-21 15:12
274 查看
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; } }
相关文章推荐
- springboot2.0.5集成mybatis(PageHelper分页插件、generator插件使用)
- 记录问题:springboot中使用Mybatis-pagehelper分页插件遇到的版本兼容问题
- Spring Boot系列教程十一: Mybatis使用分页插件PageHelper
- [置顶] MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- SpringBoot_thymeleaf_mybatis和PageHelper分页插件整合
- Mybatis-分页插件(spring boot下)
- SpringBoot+MyBatis使用pagehelper分页插件
- Spring Boot整合Mybatis-Plus和PageHelper分页插件,附项目源码
- Spring + Mybatis 使用 PageHelper 插件分页
- SpringBoot使用Mybatis注解开发教程-分页-动态sql
- 自己现实mybatis分页插件 整合springboot 运行
- Spring + Mybatis 使用 PageHelper 插件分页
- spring boot和mybatis集成分页插件
- Maven+Spring + Mybatis 使用 PageHelper 插件分页
- Springboot整合Mybatis分页使用Druid监控SQL日志
- Spring + Mybatis 使用 PageHelper 插件分页
- Spring + Mybatis 使用 PageHelper 插件分页
- springboot如何集成mybatis的pagehelper分页插件