本文仅限参考, 测试发现 使用过程中有很多问题理解不通, 但暂时不影响功能使用
问题:
1. 纳入spring管理的pageHelper配置无效
环境 : springboot1.5.17, oracle
1. maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
<exclusions>
<!-- 根据需要确定是否要去掉mybatis的starter -->
<exclusion>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
2. pageHelper配置
/**
* 没有详细了解, 感觉配置了也没啥用
* @return
*/
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
// 合理化参数,看网上教程解释, 当参数有误如页面<=0,则显示第一页,
//页码>最大页码时,显示最后一页的数据
// 我测试时发现 页码和每页记录数量值(负数,0, 分页范围内的正数, 分页范围外的正数)不同时,
//返回的结果不同,暂时不建议使用该属性
properties.setProperty("reasonable", "true");
//配置数据库的方言, 我测试的比较简单, 感觉这是唯一对我有用的参数
properties.setProperty("dialect", "oracle");
pageHelper.setProperties(properties);
return pageHelper;
}
3. 分页代码
@Autowired
private PageHelper pageHelper;
@Test
public void pageHelpTest2(){
// 页码
int pageNum = 2;
//没有数据量
int pageSize = 2;
// 调用pageHelper的startPage方法后, 一定要消费掉这个page, 作用于距离当前page最近的一条查询语句
// 会自动获取总记录数(详见构造函数)
Page page = pageHelper.startPage(pageNum, pageSize);
//从数据库获取信息,同时会消费掉page(距离page最近的一条查询sql才能消费掉这个page)
// 查询结果页也会封装到page对象(pag对象继承了ArrayList)
pageHelpMapper.listStudentByScore(80);
// Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=6, pages=3, reasonable=false, pageSizeZero=false}
// System.out.println(page);
// 遍历获取的数据, page的tostring方法被重写了, 直接输出的话没有详细的结果
page.forEach(item-> System.out.println(item));
// 分页后的基本数据
page.getPageNum();// 当前页码
page.getPageSize(); // 每页数据量
page.getPages();// 总页数
page.getTotal();//总记录数量
PageInfo<Student> pageInfo = new PageInfo<>(page);
// 所有页码, 如果不需要该数据,则可以直接返回page对象
pageInfo.getNavigatepageNums();// 所有页码 [1, 2, 3]
//pageinfo=PageInfo{pageNum=2, pageSize=2, size=2, startRow=3, endRow=4, total=6, pages=3, list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=6, pages=3, reasonable=false, pageSizeZero=false}, prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=3, navigatepageNums=[1, 2, 3]}
// System.out.println("pageinfo="+pageInfo);
}
4. 调用mapper查询数据库, 返回值为Page类型, 且两者包含的数据是一样的如图:
5. pageHelp使用中可能的问题
5.1 打印日志发现仅打印了查总数的sql, 没有打印查询数据的sql:
原因1: 根据条件查不到数据, 就没有再发起差具体记录的sql请求