MyBatis 从入门到精通:分页在MyBatis中使用

发布于:2024-04-21 ⋅ 阅读:(36) ⋅ 点赞:(0)

在这里插入图片描述

先欣赏下美女

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页——默语的博客👦🏻
《Java面试题大全》
《Java专栏》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MySQL从入门到精通》数据库是开发者必会基础之一~
🪁吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进!💻⌨


🚀分页在MyBatis中使用

👩‍💻摘要

本文介绍了MyBatis中分页技术的几种实现方式,包括使用Limit分页和RowBounds分页,以及分页插件的简要了解。

🎯引言

在大型数据处理场景下,合理的分页技术是提高系统性能的关键之一。MyBatis作为一款优秀的持久化框架,在分页处理方面提供了多种选择,本文将深入探讨这些技术的应用。

💡正文内容

😕 为什么要分页?

分页技术是一种在处理大量数据时常用的方法,它的主要目的是优化系统性能和提高用户体验。分页的主要好处包括:

提高性能: 一次性加载大量数据可能会导致系统性能下降,特别是对于网络连接较慢或设备资源有限的情况。通过分页加载数据,可以减少每次请求所需的数据量,从而提高系统的响应速度。
减少内存占用: 在内存有限的情况下,一次性加载大量数据可能会导致内存溢出。通过分页加载数据,可以将数据分成多个页面,每次只加载一页数据,从而减少内存占用。
提高用户体验: 分页技术可以让用户逐页浏览数据,而不是一次性展示所有数据。这样做不仅可以减少用户等待时间,还可以提高用户体验,让用户更轻松地浏览和搜索所需的信息。

🚀 使用Limit分页介绍

Limit分页通过SQL语句中的LIMIT关键字实现分页,是一种简单而直观的分页方式。在MyBatis中,可以轻松地通过传递参数来实现分页。

当处理大量数据时,一次性加载所有数据可能会影响性能并增加系统负担。为了提高性能和用户体验,常常会采用分页技术。LIMIT 分页是一种在 SQL 查询中使用的简单而有效的分页技术,主要通过在查询语句中使用 LIMIT 关键字来实现。

在 SQL 查询语句中,LIMIT 关键字用于指定返回结果的起始位置和数量。它的一般语法如下:

SELECT column1, column2, ...
FROM table_name
LIMIT offset, count;

其中:

  • offset 指定了返回结果的起始位置(从0开始计数),表示要跳过的前几行记录。
  • count 指定了要返回的记录数量。

举个例子,如果想要查询从第 20 行开始的 10 条记录,可以这样写:

SELECT column1, column2, ...
FROM table_name
LIMIT 20, 10;

在这个查询中,LIMIT 20, 10 表示从第 20 行开始返回 10 条记录。

在实际应用中,可以将 LIMIT 分页与 ORDER BY 结合使用,以确保返回的结果是按照指定的顺序排列的。比如,如果想要按照某个字段的升序或降序排列,并分页返回结果,可以这样写:

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT offset, count;

LIMIT 分页是一种简单而直观的分页方式,适用于大多数数据库系统,并且能够有效提高系统性能和用户体验。


📄 使用Limit分页

语法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3;  #[0,n]

在MyBatis中实现分页的核心SQL操作。

1. 分页接口定义
// 分页
List<User> getUserByLimit(Map<String,Integer> map);
2. Mapper.xml配置
<!-- 分页 -->
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
3. 分页测试
@Test
public void getUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("startIndex",1);
    map.put("pageSize",2);

    List<User> userList =  mapper.getUserByLimit(map);
    for (User user : userList) {
        System.out.println(user);
    }

    sqlSession.close();
}

🚀 RowBounds分页介绍

RowBounds分页不再依赖SQL语句,而是通过Java代码层面实现分页。虽然相对于Limit分页更为灵活,但在处理大数据量时可能性能略有损耗。

RowBounds 分页是 MyBatis 中一种基于 Java 代码层面实现分页的方法。与传统的在 SQL 语句中使用 LIMIT 关键字不同,RowBounds 分页不依赖于 SQL 语句,而是在查询结果返回后,在 Java 代码中对结果进行切片和处理来实现分页效果。

使用 RowBounds 分页,你可以通过指定起始位置和每页数量的方式来控制返回结果的范围。在 MyBatis 中,可以通过 RowBounds 对象来实现这一目的。

以下是一个简单的示例:

import org.apache.ibatis.session.RowBounds;
import java.util.List;

public interface UserMapper {
    List<User> getUsersWithRowBounds(RowBounds rowBounds);
}

在 XML 映射文件中,你可以调用该方法,并在参数中传入 RowBounds 对象,指定分页的起始位置和数量。例如:

<select id="getUsersWithRowBounds" resultType="User">
    SELECT * FROM users
</select>

在调用该方法时,可以创建一个 RowBounds 对象并传入,指定起始位置和数量,例如:

int offset = 20; // 起始位置
int limit = 10; // 每页数量
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> users = userMapper.getUsersWithRowBounds(rowBounds);

使用 RowBounds 分页相对于在 SQL 语句中使用 LIMIT 更加灵活,因为它可以在不修改 SQL 查询语句的情况下进行分页。然而,在处理大数据量时,RowBounds 分页可能会略微影响性能,因为它需要在 Java 代码中进行结果的切片和处理。

📄 RowBounds分页

不再依赖SQL来实现分页。

1. 分页接口定义
// 分页2
List<User> getUserByRowBounds();
2. Mapper.xml配置
<!-- 分页2 -->
<select id="getUserByRowBounds" resultMap="UserMap">
    select * from mybatis.user
</select>
3. 分页测试
@Test
public void getUserByRowBounds(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    // RowBounds实现
    RowBounds rowBounds = new RowBounds(1, 2);

    // 通过Java代码层面实现分页
    List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserByRowBounds", null, rowBounds);

    for (User user : userList) {
        System.out.println(user);
    }

    sqlSession.close();
}

📄 分页插件

了解分页插件,若未来在工作中需要用到,能够理解其作用。

在这里插入图片描述

🤔QA环节

  • 问:分页插件适用于哪些场景?
    答:分页插件适用于需要更灵活、更高定制化的分页需求,比如复杂的分页逻辑或特殊的业务场景。

📝小结

通过本文的介绍,读者应该对MyBatis中的分页技术有了更深入的了解。合理地运用分页技术能够提高系统性能,提升用户体验。

📊表格总结

分页方式 优点 缺点
Limit分页 实现简单,直观 在处理大数据量时可能性能有损耗
RowBounds分页 灵活,可以在Java代码中动态控制分页逻辑 性能相对较差,不适合处理大数据量
分页插件 提供了更高度的定制化和扩展性 学习成本较高,不适合简单的分页需求

🌟总结

本文详细介绍了MyBatis中的分页技术,包括Limit分页、RowBounds分页以及分页插件的应用。通过合理地选择和运用分页技术,能够有效提高系统性能,提升用户体验。

📚参考资料

在这里插入图片描述


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到