优雅编程(三)——MybatisPageHelper
如果你也在用 MyBatis,建议尝试该分页插件,该插件支持很多复杂的单表、多表物理分页。
-
支持常见的12中数据库(MySQL、Oracle、SqlServer。。。)
-
支持常见的RowBounds(PageRowBounds)、PageHelper.startPage 方法调用、Mapper 接口参数调用
-
使用 QueryInterceptor 规范
详情查看PH官网:https://pagehelper.github.io/
PageHelper插件功能直接明了,就是简化开发中的分页操作,直接上手学习一下。
百度上SSM项目引入PageHelper的解决方法已经很多了,主要学习一下SpringBoot引入的方法,首先引入Pom依赖:
<!--https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
甚至可以不进行任何PageHelper的配置即可使用,粘出演示应用的配置:
#pageHelper
#pagehelper.helper-dialect=mysql
#pagehelper.reasonable=true
#pagehelper.support-methods-arguments=true
#pagehelper.params=count=countSql
#Mybatis
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这一利器的话,可以看一下上一篇博文——优雅编程(二)。
完成了上述操作,即可开始使用了:
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
public List<User> selectAllUsers() {
//使用静态方法startPage方法即可开启分页操作,自动将后面的查询进行分页操作
PageHelper.startPage(1,7);
//直接使用自动生成的mapper接口方法
return userMapper.selectByExample(null);
}
}
编写controller方法后,验证一下分页结果:
@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注入的代码:
@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;
}
}