引言
在实际开发中,我们为了提高页面的响应速度,也为了优化用户的体验,同时也减少流量和性能的消耗,往往在面对大量数据时会采取分页的操作。
接下来这篇文章我带大家从原生的SQL语句中的分页到MyBatis中去分页,最后我们再看一下MyBatis-plus下的分页操作。
MySQL的分页(分页在SQL层面的原理)
MySQL 分页操作可以使用 LIMIT
和 OFFSET
子句来实现。
例如,如果想从一个 users
表中选择第二页(每页显示 10 条记录)的数据,可以使用以下查询:
SELECT * FROM users LIMIT 10 OFFSET 10;
这将从第 11 条记录开始,选择后面的 10 条记录。
如果想选择前 10 条记录,可以使用以下查询:
SELECT * FROM users LIMIT 10;
我们还可以将 LIMIT
和 OFFSET
与 WHERE
子句一起使用,以筛选数据。例如,如果想选择所有状态为 "active" 的用户,并从第二页开始(每页显示 10 条记录),可以使用以下查询:
SELECT * FROM users WHERE status = 'active' LIMIT 10 OFFSET 10;
MyBatis中使用分页
在 MyBatis 中使用分页,同样使用 LIMIT
和 OFFSET
子句,并通过参数传递给 SQL 语句。
例如,如果有一个名为 UserMapper
的接口和一个对应的 XML 映射文件,你可以在 XML 映射文件中定义如下分页查询:
<select id="selectUsers" resultType="com.example.User">
SELECT * FROM users
WHERE status = #{status}
LIMIT #{limit} OFFSET #{offset}
</select>
然后,我们可以在 UserMapper
接口中使用以下方法调用分页查询:
List<User> selectUsers(@Param("status") String status, @Param("offset") int offset, @Param("limit") int limit);
我们也可以可以通过调用该方法来选择状态为 "active" 的用户,并从第二页开始(每页显示 10 条记录)
List<User> users = userMapper.selectUsers("active", 10, 10);
mybatis-plus如何分页呢
Mybatis Plus 是一个 Mybatis 的增强工具,可以简化 Mybatis 的使用,并提供一些额外的功能。
在 Mybatis Plus 中使用分页,你需要使用 com.baomidou.mybatisplus.extension.plugins.pagination.Page
类。 该类是一个分页信息对象,包含了当前页码、每页大小等信息。
值得一提的是,MyBatis-plus是对MyBatis的一个升级,一个增强,一个扩展,引入他到你的项目中并不会对之前的MyBatis有什么影响,你可以很丝滑的在项目中去使用他。
例如,如果你想查询第二页(每页显示 10 条记录)的用户数据,可以使用以下代码:
Page<User> page = new Page<>(2, 10);
List<User> users = userMapper.selectPage(page, null);
其中,第一个参数是 Page
对象,第二个参数是查询条件。
然后,你可以使用 page.getTotal()
方法获取总记录数,page.getRecords()
方法获取当前页的数据列表。
注意,在 Mybatis Plus 中,你需要在对应的 XML 映射文件中启用分页插件,才能使用分页功能。例如:
<!-- 在mapper节点上启用分页插件 -->
<mapper namespace="com.example.UserMapper">
<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
</mapper>