您的位置首页生活百科

每日一道面试题-Mybatis是如何进行分页的?分页插件的原理是什么?

每日一道面试题-Mybatis是如何进行分页的?分页插件的原理是什么?

的有关信息介绍如下:

每日一道面试题-Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis_PageHelper分页插件

官方GitHub地址

引入jar包

配置MyBatis核心配置文件

业务层代码

执行结果

基于 SQL本身的分页

MyBatis 支持多种数据库,每种数据库的 SQL 方言可能不同。因此,MyBatis 通过在查询语句中添加不同的 SQL 语句来实现分页。

以 MySQL 为例,MyBatis 中实现分页的 SQL 语句如下:

其中,startIndex 表示查询的起始索引,pageSize 表示每页的记录数。在 MyBatis 中,这两个参数通常通过传递参数的方式来实现。

MyBatis 实现分页的原理比较简单,例如 LIMIT 子句,在数据库层面上实现分页。

在 MyBatis 中,我们可以通过两种方式来实现分页:

第一种方式:

MyBatis 支持多种数据库,每种数据库的 SQL 方言可能不同,因此需要在查询语句中添加不同的 SQL 语句来实现分页。以 MySQL 为例,MyBatis 中实现分页的 SQL 语句如下:

其中,startIndex 表示查询的起始索引,pageSize 表示每页的记录数。在 MyBatis 中,这两个参数通常通过传递参数的方式来实现。

第二种方式

使用插件实现分页:MyBatis 还提供了一种更加灵活的分页方式,即使用插件来实现分页。这种方式需要实现 MyBatis 的 Interceptor 接口,并在 intercept 方法中实现分页逻辑。

具体实现过程如下:

需要注意的是,MyBatis 中的分页通常都是基于物理分页实现的,即在数据库层面上通过 LIMIT 或者 ROWNUM 等语句进行分页,因此需要考虑性能问题。一般来说,建议在 SQL 语句中添加合适的索引,以提高查询性能。

RowBounds分页(不建议使用)

不使用SQL实现分页,通过java代码层面实现分页

//分页2:RowBounds

Mapper.xml

测试

分页过程

首先会把分页参数封装成Page对象放到ThreadLocal中

然后根据SQL进行拼接转换(select * from table where a) ->(select count(“0”)from table where a)和(select * from table where a limit ,)

有了total总条数、pageNum当前第几页、pageSize每页大小和当前页的数据,就可以算出分页的其他非必要信息(是否为首页,是否为尾页,总页数)

补充:更多关于Mysql的相关的知识考点:可以参考一下Mysql专栏:Mysql 从0到1,如果你还不知道Mysql的索引的话可以参考这篇文章:

好了,我是架构师小于哥

@终端研发部

专注分享互联网职场,技术开发小技巧,如果觉得不错可以收藏转发哦,希望我的分享对你能有帮助啊~