赞
踩
目录
4 物理分页(使用Mybatis的分页插件PageHelper实现)
逻辑分页 | 物理分页 |
---|---|
逻辑分页依赖的是程序员编写的代码,数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合是有序,再根据索引获取指定范围的数据。 | 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供的Limit关键字,程序员只需要编写带有Limit关键字的SQL语句,数据库返回的就是分页的结果。 |
只要访问一次数据库。 | 每次都要访问数据库,对数据库造成的负担大。 |
一次性将数据读取到内存,占用较大的内存空间,如果使用java开发,java本身引用框架就占用了很多内存,这无疑加重了服务器的负担。 | 每次只读取部分数据,占用的内存空间较小。 |
一次性将数据读取到内存,数据库数据发生改变,数据库的最新状态不能实时反映到操作中,实时性差。 | 每次需要数据时都要访问数据库,能够获取数据库的最新状态,实时性强。 |
适用于数据量较小、数据稳定的场合。 | 适用于数据量大、更新频繁的场合。 |
- <!-- pagehelper-spring-boot-starter -->
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- <artifactId>pagehelper-spring-boot-starter</artifactId>
- <version>1.4.3</version>
- </dependency>
-
- <!-- mybatis-spring-boot-starter -->
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.2.2</version>
- </dependency>
-
- <!-- mysql -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.26</version>
- <scope>runtime</scope>
- </dependency>
-
- <!-- hutool -->
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.7.22</version>
- </dependency>
-
- <!-- lombok -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/数据库名?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: xxx password: xxx # 以下解决数据库连接池问题HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=58m22s480ms63µs200ns). hikari: auto-commit: true # 空闲超时时间 idle-timeout: 60000 # 连接超时时间 connection-timeout: 60000 # 最大生命周期 max-lifetime: 0 # 最小空闲连接数 minimum-idle: 10 # 最大连接数 maximum-pool-size: 10 # mybatis 配置 mybatis: type-aliases-package: com.wen.po mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 分页 # pagehelper: # helper-dialect: mysql # reasonable: true # support-methods-arguments: true # params: count=countSql
- /**
- * @author W
- * @createDate 2022/9/27
- * @description: 学生实体类
- */
- @Data
- @EqualsAndHashCode(callSuper = false)
- public class Stu implements Serializable {
- private static final long serialVersionUID = 1L;
-
- private Integer id;
- private String name;
- private Integer age;
- private String gender;
- private String address;
- private Date birth;
- }

- public ResponseResult<?> getLogicPaging(int pageNum, int pageSize, Stu stu) {
- if(pageNum<=0) {
- pageNum = 1;
- }
- if(pageSize<=0) {
- pageSize = 10;
- }
- if(ObjectUtil.isEmpty(stu)){
- stu = new Stu();
- }
- List<Stu> stuList = stuMapper.selectAll(stu);
- //当前页第一条数据的下标
- int curIdx = pageNum > 1 ? (pageNum - 1) * pageSize : 0;
- List<Stu> pageList = new ArrayList<>();
- // 将当前页的数据放进pageList
- for(int i = 0; curIdx + i < stuList.size() && curIdx + i < pageNum*pageSize; i++) {
- if(ObjectUtil.isNotEmpty(stuList.get(curIdx + i))) {
- pageList.add(stuList.get(curIdx + i));
- }
- }
- PageInfo<Stu> page = new PageInfo<>(pageList);
- page.setPageNum(pageNum);
- page.setPageSize(pageSize);
- page.setSize(pageList.size());
- page.setTotal(stuList.size());
- return ResponseResult.success(page);
- }

- @GetMapping("/logicPaging")
- public ResponseResult<?> getLogicPaging(int pageNum, int pageSize, Stu stu){
- return stuService.getLogicPaging(pageNum,pageSize,stu);
- }
如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。
PageHelper官网地址:如何使用分页插件
- public ResponseResult<?> getPhysicalPaging(int pageNum, int pageSize, Stu stu) {
- if(pageNum<=0) {
- pageNum = 1;
- }
- if(pageSize<=0) {
- pageSize = 10;
- }
- if(ObjectUtil.isEmpty(stu)){
- stu = new Stu();
- }
- PageHelper.startPage(pageNum,pageSize);
- List<Stu> stuList = stuMapper.selectAll(stu);
- PageInfo<Stu> page = new PageInfo<>(stuList);
- //page.setPageNum(pageNum);
- //page.setPageSize(pageSize);
- //page.setSize(stuList.size());
- return ResponseResult.success(page);
- }

- @GetMapping("/physicalPaging")
- public ResponseResult<?> getPhysicalPaging(int pageNum, int pageSize, Stu stu){
- return stuService.getPhysicalPaging(pageNum,pageSize,stu);
- }
未完待续。。。。。。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。