【Java】MyBatis是如何进行分页的?
实际开发中实现分页的方式:
1)直接在 Select 语句上增加数据库提供的分页关键字,并在应用程序中传递当前页,以及每页展示条数。
2)使用MyBatis 提供的RowBounds 对象实现内存级别分页。
3)基于 MyBatis 中的Iterceptor 拦截器,在 select 语句执行之前动态拼接分页关键字。
MyBatis 是 Java 应用开发的基础框架,而分页又是我们随时都在使用的功能。数据进行分页是最基础的功能,分页一般可以分为如下两类。
1)逻辑分页,先查询出所有的数据并缓存到内存,再根据业务相关需求,从内存数据中筛选出合适的数据进行分页。
2)物理分页,直接利用数据库支持的分页语法来实现,比如 MySQL 中提供了分页关键词Limit。
MyBatis 提供的4种分页方式
1)在MyBatis Mapper 配置文件中直接写分页 SQL,这种方式比较灵活,实现也简单
2)RowBounds 实现逻辑分页,也就是一次性加载所有符合查询条件的目标数据,根据页参数值在内存中实现分页。当然,在数据量比较大的情况下,JDBC 驱动本身会做一些优化也就是说,不会把所有结果存储在 ResultSet 中,而是只加载一部分数据,再根据需求从数据库中加载。这种方式不适合数据量较大的场景,而且有可能会因频繁访问数据库造成比较大的压力o
3)Interceptor 拦截器实现,通过拦截需要分页的 select 语句,并在这个 select 语句中动态拼接分页关键字,从而实现分页查询,Interceptor 是 MyBatis 提供的一种针对不同生命周期的拦截器,比如拦截执行器方法、拦截参数的处理、拦截结果集的处理、拦截 SQL 语法构建的处理。我们可以通过拦截不同阶段的处理来实现 MyBatis 相关功能的扩展。采用这种方式的好处就是,可以提供统一的处理机制,不需要我们单独维护分页相关的功能
4)插件(PageHelper)及(MyBaits-Plus、tkmybatis)框架实现,这些插件本质上也是使用Mybatis 的拦截器来实现的。它们帮我们实现了扩展和封装,节省了分页扩展封装的工作量,在实际开发中拿来即用即可。
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!