Mybatis如何进行分页的
Mybatis是Java应用开发的基础框架,而分页是我们时时都在使用的功能,一般我们可以把分页分为两种:
- 逻辑分页。先查询出所有的数据缓存到内存里,再根据业务相关的一些需求,从内存的数据里面去筛选出合适的数据进行分页
- 物理分页。直接利用数据库里面支持的语法进行分页,比如Mysql里面提供了分页相关的关键词limit
Mybatis里面提供了三种分页方式:
- 在Mybatis Mapper配置文件里面,直接去写分页的SQL。这种方式比较灵活,实现也比较简单。直接在select语句上增加数据库提供的分页关键字,然后在应用程序里面提供当前页,以及每页展示的条数即可
- 通过RowBounds去实现逻辑分页,也就是一次性去加载所有符合查询条件的目标数据,根据分页参数的值,在内存里面去实现分页。当然在数据量比较大的情况,JDBC驱动本身会做一些优化,也就是说不会把所有的结果一次性查询存储在ResultSet里面,而是先只加载一部分数据,然后再根据需求去数据库里面加载。这种方式不适合数据量较大的场景,而且可能会频繁访问数据库造成较大的压力
- 通过Interceptor拦截器实现,通过拦截分页的select语句,然后在这个select语句里面去动态拼接分页的关键字,从而去实现分页查询。Intercetor是Mybatis里面提供的一种针对于不同生命周期的拦截器,比如:拦截执行器方法、拦截参数的处理、拦截结果集的处理、拦截SQL语法构建的处理,我们可以拦截不同阶段的处理,来实现Mybatis里面相关功能的扩展。好处就是可以提供统一的处理机制,不需要我们在单独去维护分页的相关的一些功能,PageHelper、Myabtis-Plus、tkmybatis这些框架,本质上都是通过Mybatis拦截器进行的扩展,去帮我们去实现了分页的封装,让我们不需要去关心分页相关的一些配置,节省了开发时间