当前位置: 首页 > news >正文

Mybatis实现分页查询数据(代码实操讲解)

在MyBatis中实现分页查询的常见方式有两种:使用MyBatis内置的分页插件如PageHelper,或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。

使用PageHelper分页插件

首先,确保你的项目中已经添加了PageHelper的依赖。在Maven项目中,可以在pom.xml文件中添加如下依赖(版本号可能需要更新):

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>最新版本</version>
</dependency>

然后,在你的Service或Mapper层调用PageHelper的静态方法startPage来启动分页功能,之后紧跟着的查询就是一个分页查询了。

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import java.util.List;public PageInfo<User> findByPage(int pageNum, int pageSize) {// pageNum: 页码, pageSize: 每页显示数量PageHelper.startPage(pageNum, pageSize);// 紧跟着的第一个select方法会被分页List<User> users = userMapper.selectAll();// 使用PageInfo包装查询结果,便于使用return new PageInfo<>(users);
}

手动编写分页SQL

如果你不想使用分页插件,也可以手动编写SQL实现分页。以下是一个基于MySQL数据库的分页查询示例:

<!-- MyBatis的Mapper文件 -->
<select id="findByPage" resultType="User">SELECT * FROM usersORDER BY idLIMIT #{offset}, #{pageSize}
</select>

确实,如果你直接使用手动编写的分页SQL查询,这种方式并不会自动返回查询结果的总数(total)。要获取总数,通常需要执行一个额外的SQL查询来计算总记录数。这意味着对于分页功能,你通常需要执行两个查询:一个是分页查询本身,另一个是为了获取总记录数的查询。

以下是如何实现这一点的示例:

1. 查询总记录数(注意这里需要查询你需要数据库中全部信息返给前端作为total值)

首先,你需要一个SQL查询来获取总记录数。这通常是一个简单的SELECT COUNT语句。

<!-- 在MyBatis的Mapper文件中 -->
<select id="findTotalCount" resultType="int">SELECT COUNT(*) FROM users
</select>

2. 修改Service或DAO层

然后,在你的Service或DAO层,你可以首先查询总记录数,然后执行分页查询。这样,你可以将总记录数和分页查询的结果一起返回给调用者。

import java.util.HashMap;
import java.util.List;
import java.util.Map;public Map<String, Object> findByPage(int pageNum, int pageSize) {int offset = (pageNum - 1) * pageSize;int total = userMapper.findTotalCount(); // 获取总记录数List<User> users = userMapper.findByPage(offset, pageSize); // 分页查询Map<String, Object> result = new HashMap<>();result.put("total", total); // 总记录数result.put("users", users); // 分页查询结果return result;
}

这样,你就可以在前端或调用者那里得到总记录数和当前页的记录列表,从而可以计算出总页数、当前页码等分页信息,为用户提供完整的分页功能。

记得,每次分页查询都执行两次数据库操作(一次获取总数,一次实际分页查询)可能会对性能有一定影响,特别是在处理大量数据时。因此,对于数据量非常大的情况,需要考虑缓存策略或其他优化手段。在这里,#{offset}是查询的起始位置(例如,在第2页,每页10条记录,offset应该是10),#{pageSize}是每页显示的记录数。

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/311979.html

相关文章:

  • 【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记
  • 2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建(运维配置)
  • Linux设备模型(八) - sysfs
  • C语言实现Linux下的UDP服务端和客户端
  • Excel小技巧 (2) - 如何去除和增加前导0
  • 【GIS人必看】ArcPy脚本如何导入到ArcToolBox中(上)【建议收藏】
  • AI入门笔记(三)
  • Linux搭建SFTP服务器
  • MobaXterm无法上传整个文件夹,只能上传的单个文件
  • Android 中get请求网络数据 详细举例
  • 每日五道java面试题之mysql数据库篇(六)
  • Latex——多张图排列
  • 前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
  • JavaScript命名标识符规范,前端开发面试
  • 从零学习Linux操作系统 第三十部分 部署Anisble
  • C++对象模型剖析(六)一一Data语义学(三)
  • Java 代理模式详解(附案例源代码)
  • 七牛云 上传 文件 file is empty
  • 【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024
  • 使用 BLAS 调用加快生成的独立代码中的矩阵运算
  • 一台服务器,最大支持的TCP连接数是多少?
  • 微信小程序云开发教程——墨刀原型工具入门(编辑页面)
  • flutter打包app
  • 力扣543. 二叉树的直径
  • python网络爬虫教程笔记(1)
  • C# 异步返回类型详解
  • BAT等大厂必问技术面试题,【2024Android最新学习路线
  • 72. 编辑距离【leetcode】/动态规划难
  • 【MySQL】视图、索引
  • 反编译java生成的.class文件