网站备案完毕 怎样建设网站,中山免费网站建设,化妆品网站 源码,推进乡村振兴 加快建设农业强国大家好#xff0c;我是锋哥。今天分享关于【Mybatis是如何进行分页的#xff1f;】面试题。希望对大家有帮助#xff1b; Mybatis是如何进行分页的#xff1f;
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
MyBatis 实现分页的方式有很多种#xff0c;最常见…大家好我是锋哥。今天分享关于【Mybatis是如何进行分页的】面试题。希望对大家有帮助 Mybatis是如何进行分页的
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
MyBatis 实现分页的方式有很多种最常见的方法是通过 SQL 查询语句中的 LIMIT 和 OFFSET或者通过使用分页插件来简化开发。以下是 MyBatis 中实现分页的几种常见方式
1. 手动编写分页 SQL
在 MyBatis 中最直接的分页方式是手动在查询的 SQL 语句中加入分页的 LIMIT 和 OFFSET针对 MySQL或 ROWNUM针对 Oracle等分页关键字。
示例MySQL 分页
假设我们有一个用户表 users可以通过如下 SQL 语句进行分页查询
select idselectUsers resultTypeUserSELECT * FROM usersLIMIT #{offset}, #{limit}
/select#{offset} 表示查询的起始位置通常是 (页数 - 1) * 每页记录数。#{limit} 表示每页的记录数。
调用时传入分页参数例如
int offset (pageNum - 1) * pageSize;
ListUser users sqlSession.selectList(selectUsers, Map.of(offset, offset, limit, pageSize));示例Oracle 分页
对于 Oracle 数据库分页通常通过 ROWNUM 或 ROW_NUMBER() 来实现
select idselectUsers resultTypeUserSELECT * FROM (SELECT a.*, ROWNUM rnum FROM users a WHERE ROWNUM #{end}) WHERE rnum #{start}
/select调用时传入分页参数例如
int start (pageNum - 1) * pageSize;
int end pageNum * pageSize;
ListUser users sqlSession.selectList(selectUsers, Map.of(start, start, end, end));这种方法的缺点是每次都需要手动编写分页逻辑且与数据库的分页语法紧密耦合。
2. 使用 MyBatis 分页插件
为了简化分页的实现可以使用第三方分页插件。常见的 MyBatis 分页插件有 PageHelper 和 MyBatis-Plus。
使用 PageHelper 插件
PageHelper 是一个非常流行的 MyBatis 分页插件它通过拦截 SQL 查询并动态生成分页 SQL 语句来实现分页功能。 添加依赖 如果使用 Maven可以在 pom.xml 文件中添加 PageHelper 依赖 dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.2.0/version
/dependency配置 PageHelper 在 MyBatis 配置文件中配置 PageHelper 插件 pluginsplugin interceptorcom.github.pagehelper.PageInterceptorproperty namehelperDialect valuemysql /property namereasonable valuetrue //plugin
/plugins分页查询 在调用分页查询时直接使用 PageHelper.startPage() 方法来设置分页参数 PageHelper.startPage(pageNum, pageSize);
ListUser users userMapper.selectUsers(); // 这里的 selectUsers 是查询方法
PageInfoUser pageInfo new PageInfo(users);PageHelper.startPage(pageNum, pageSize) 会在执行查询之前拦截 SQL 并修改其为分页查询返回的结果会自动封装成 PageInfo 对象里面包含了分页信息总页数、总记录数等。
使用 MyBatis-Plus 插件
MyBatis-Plus 是另一个流行的 MyBatis 扩展库它也提供了简单易用的分页功能。 添加依赖 如果使用 Maven可以在 pom.xml 文件中添加 MyBatis-Plus 依赖 dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.0/version
/dependency分页查询 使用 MyBatis-Plus 提供的 Page 类来进行分页查询 PageUser page new Page(pageNum, pageSize);
IPageUser usersPage userMapper.selectPage(page, null); // 第二个参数为查询条件
ListUser users usersPage.getRecords(); // 获取分页结果
long total usersPage.getTotal(); // 获取总记录数MyBatis-Plus 会自动处理分页逻辑不需要手动编写分页 SQL且支持多种数据库。
总结
MyBatis 中分页通常有以下几种方式
手动编写 SQL适合简单场景但需要针对不同的数据库写不同的 SQL。使用分页插件如 PageHelper 或 MyBatis-Plus插件方式更简洁能够自动处理分页逻辑减少开发工作量。
通常情况下使用分页插件会更加方便和高效特别是当项目需求中涉及到多种数据库或复杂的查询逻辑时。