如果你也在用 MyBatis,建议尝试该分页插件,该插件支持很多复杂的单表、多表物理分页。
PageHelper插件功能直接明了,就是简化开发中的分页操作,直接上手学习一下。
百度上SSM项目引入PageHelper的解决方法已经很多了,主要学习一下SpringBoot引入的方法,首先引入Pom依赖:
1 2 3 4 5 6
| <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </dependency>
|
甚至可以不进行任何PageHelper的配置即可使用,粘出演示应用的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
mybatis.type-aliases-package=com.example.testpagehelper.edu.li.pojo mybatis.mapper-locations=classpath:mapper/*.xml spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123
logging.level.com.example.testpagehelper.edu.li.dao=debug
|
因为演示应用比较简单,所以直接使用mybatis-generator生成了持久层代码(pojo、mapper、mapper.xml),如果还没用过mybatis-generator这一利器的话,可以看一下上一篇博文——优雅编程(二)。
完成了上述操作,即可开始使用了:
1 2 3 4 5 6 7 8 9 10 11 12
| @Service public class UserServiceImpl implements UserService { @Autowired UserMapper userMapper; public List<User> selectAllUsers() { PageHelper.startPage(1,7); return userMapper.selectByExample(null); } }
|
编写controller方法后,验证一下分页结果:
1 2 3 4 5 6 7 8 9 10
| @RestController public class UserController { @Autowired UserService userService;
@RequestMapping("/users") public List<User> selectAllUsers(){ return userService.selectAllUsers(); } }
|
可以看到请求结果只有7条:
观察控制台上的日志发现,先进行了一次查数据量sql,再进行了使用limit分页查询sql,逻辑比较简单清晰:
PageHelper的使用看起来还是非常简单的,但是其中的坑也有很多。因为博主也是初次使用的菜鸟,所以只能等待后续学习中慢慢踩坑记录。本博文撰写时的应用演示蹭了SpringBoot的光,使用的是基于SpringBoot版本的PageHelper,如果使用了其他非SpringBoot版本的PageHelper依赖,可能需要对PageHelper进行Bean注入,下面是实现Bean注入的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Configuration public class MyabatisConfig { @Bean public PageHelper pageHelper(){ System.out.println("PageHelper 注入容器。。。"); PageHelper pageHelper=new PageHelper(); Properties properties=new Properties(); properties.setProperty("offsetAsPageNum", "true"); properties.setProperty("rowBoundsWithCount", "true"); properties.setProperty("reasonable", "true"); pageHelper.setProperties(properties); return pageHelper; } }
|