PageHelper:MyBatis 的一个分页插件。
1.2 Maven 依赖
PageHelper 的实现依赖自 com.github.pagehelper
PageHelper on GitHub : PageHelper
Spring:
com.github.pagehelper pagehelper 5.2.0
Spring Boot :
1.3 PageHelper 配置com.github.pagehelper pagehelper-spring-boot-starter 1.4.0
使用 PageHelper 时,我们常常需要单独配置它的属性,在 Spring Boot 与 Spring 中配置方法有所不同。
Using in mybatis-config.xml
Using in Spring application.xml
param1=value1
Using in Spring Boot application.yml
pagehelper: param1: value1 param2: value2 ...1.4 PageHelper 属性
PageHelper 为我们提供了许多可配置的属性,具体配置时根据环境的不同选择上方的配置方法。
配置的属性类实现自 Dialect 接口,想要自定义属性可以实现该接口!PageHelper 类也是是实现了该接口。
常用属性:
-
helperDialect:配置数据库类型,由此自动选择合适的分页方式。
- Options:oracle、mysql、db2、sqlserver …
-
reasonable:分页合理化参数,默认值为false
- false:直接根据参数进行查询
- true:pageNum<=0 时会查询第一页, pageNum>pages(总页数),会查询最后一页
-
params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值
- Options:pageNum、pageSize、count、pageSizeZero、reasonable
- Default:pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
-
supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据 params 配置的字段中取值,查找到合适的值时就会自动分页
-
pageSizeZero:默认值为 false
- true:如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果
其他属性:
- offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效
- true:会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页
- rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。
- true:使用 RowBounds 分页会进行 count 查询
- autoRuntimeDialect:默认值为 false
- true:允许在运行时根据多数据源自动识别对应方言的分页
- closeConn:默认值为 true
- true:当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接
- false:不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。
下面将在SSM框架中使用 PageHelper!
IDEA:2021.2
Tomcat:8.5.39
Maven:3.8.2
PageHelper:5.2.0
依赖:
2.1 配置属性com.github.pagehelper pagehelper 5.2.0
在 Spring 的配置文件中配置属性。
ApplicationContext.xml
2.2 Servicemysql true
我们不需要修改Mapper中的东西,但需要保证我们已经有了全查的方法。
在 Service 接口中添加一个抽象方法:
PageInfoqueryList(Integer pageNum, Integer pageSize);
pageNum:分页后的页数
pageSize:每页数据记录的条数
2.3 ServiceImplPageInfo 中还有很多的参数,就不一一举例了!
在 Service 的实现类中,实现上面写的抽象方法:
public PageInfo2.4 ControllerqueryList(Integer pageNum, Integer pageSize) { // 如果使用分页,先调用startPage PageHelper.startPage(pageNum,pageSize); // 调取Mapper的getAllUser方法,查询所有数据 List allUser = userMapper.getAllUser(); // 将所有数据放入到分页类中 PageInfo userPageInfo = new PageInfo<>(allUser, pageSize); return userPageInfo; }
@RequestMapping("/getAllUser")
public String getAllUser(Model model, HttpServletRequest request){
// 获取页面传入的页面编号,若值为空则赋1,否则将获取页面编号赋给pageNum
int pageNum = request.getParameter("pageNum")==null ? 1 : Integer.valueOf( request.getParameter("pageNum"));
// 每页显示几条数据
int pageSize = 3;
// 存放当前页显示的信息
PageInfo pageInfo = userService.queryList(pageNum, pageSize);
// 当前的总页数
model.addAttribute("pages",pageInfo.getPages());
// 获取当前页码
model.addAttribute("pageNum",pageInfo.getPageNum());
// 获取前端页面显示的数量
model.addAttribute("pageSize",pageInfo.getPageSize());
model.addAttribute("userList",pageInfo.getList());
return "userlist";
}
2.5 JSP
JSP中添加如下div(应该能看懂吧):
共${pages}页
当前第${pageNum}页
首页
|上一页
|
下一页|
尾页
2.6 测试
3. Spring Boot 中使用
依赖:
3.1 配置属性com.github.pagehelper pagehelper-spring-boot-starter 1.4.0
在 Spring Boot 的配置文件中配置属性。
application.yml
pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true page-size-zero: true3.2 Service
PageInfo3.3 ServiceImplqueryList(Integer pageNum, Integer pageSize);
@Override public PageInfo3.4 ControllerqueryList(Integer pageNum, Integer pageSize) { // 如果要使用分页,先调用startPage方法 PageHelper.startPage(pageNum, pageSize); // 查询所有数据 List all = getAll(); // 将所有的数据存放至分页的类中 PageInfo pageInfo = new PageInfo<>(all, pageSize); return pageInfo; }
@RequestMapping("/emps")
public String list(Model model, HttpServletRequest request) {
int pageNum = request.getParameter("pageNum")==null ? 1 : Integer.valueOf( request.getParameter("pageNum"));
int pageSize = 3;
PageInfo pageInfo = employeeService.queryList(pageNum, pageSize);
model.addAttribute("pages",pageInfo.getPages());
model.addAttribute("pageNum",pageInfo.getPageNum());
model.addAttribute("pageSize",pageInfo.getPageSize());
model.addAttribute("employees",pageInfo.getList());
return "list";
}
3.5 HTML
3.6 测试 4. 写在最后
在Spring、Spring Boot 中使用 PageHalper 时导入的依赖不一样!
在Spring、Spring Boot 中配置属性时的方法不一样!
❤️ END ❤️



