【服务器】MyBatis是如何在java中使用并进行分页的?
MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)到数据库中的记录。
MyBatis的特点
-
SQL 分离:MyBatis 将 SQL 语句从 Java 代码中分离出来,通常放在 XML 文件中,使得 SQL 更加清晰,并且便于维护。
-
灵活的映射:提供强大的映射功能,能够将 SQL 查询的结果直接映射到 Java 对象(POJOs),包括一对一、一对多等复杂关系映射。
-
动态 SQL:支持基于 OGNL 表达式的动态 SQL 构建,允许根据不同的条件生成不同的 SQL 语句。
-
插件机制:通过插件机制可以对 SQL 执行过程进行拦截和增强,比如实现分页、缓存等功能。
-
与 Spring 集成:易于与 Spring 等主流框架集成,提供事务管理和依赖注入的支持。
-
数据库独立性:尽管 MyBatis 不像 Hibernate 那样提供完全的 ORM 解决方案,但它仍然可以在不同类型的数据库之间保持较高的移植性,只需要调整相应的 SQL 语句或使用插件如 PageHelper 来适配特定数据库的方言。
-
性能优化:由于它是半自动化的持久层框架,开发者可以根据需要手动编写高效的 SQL,从而获得更好的性能。
在 Java 中使用 MyBatis 进行分页
在 Java 中使用 MyBatis 进行分页查询,通常会结合数据库的分页功能或使用第三方插件如 PageHelper 来简化分页逻辑。以下是使用 PageHelper 插件进行分页的基本步骤:
-
引入依赖:
首先,在项目的pom.xml
文件中添加 PageHelper 和 MyBatis 的依赖。 -
配置 PageHelper:
在 MyBatis 的配置文件中配置 PageHelper 插件,例如在mybatis-config.xml
中添加如下配置:<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 配置参数 --></plugin> </plugins>
-
编写 Mapper 接口:
创建对应的 Mapper 接口,并定义需要执行的查询方法。例如:public interface UserMapper {List<User> selectUsers(); }
-
使用 PageHelper 进行分页:
在调用查询方法之前,使用 PageHelper 提供的方法开始分页,比如PageHelper.startPage(pageNum, pageSize)
,其中pageNum
是页码,pageSize
是每页显示的数量。import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo;// 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<User> userList = userMapper.selectUsers(); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList);
-
处理分页结果:
使用PageInfo
类来获取分页后的数据,包括总记录数、总页数、当前页的数据列表等信息。
PageHelper插件配置
PageHelper 插件提供了丰富的配置选项来满足不同的分页需求。这些配置项可以在 MyBatis 的全局配置文件(如 mybatis-config.xml
)中定义,或者在启动 PageHelper 时通过代码方式设置。以下是 PageHelper 的一些主要配置参数:
-
helperDialect:
- 数据库方言,用于告诉插件使用哪种数据库的分页语法。例如:
mysql
,oracle
,sqlserver
等。如果未指定,插件会自动检测当前数据库的方言,但推荐显式指定以避免潜在问题。
- 数据库方言,用于告诉插件使用哪种数据库的分页语法。例如:
-
reasonable:
- 分页合理化,默认值为
false
。开启后,当pageNum <= 0
时会自动调整为第一页;当pageNum > pages
(总页数)时会自动调整为最后一页。
- 分页合理化,默认值为
-
supportMethodsArguments:
- 是否支持通过方法参数来传递分页参数,默认值为
false
。开启后可以不使用PageHelper.startPage
方法,而是直接在 Mapper 接口的方法中添加分页参数。
- 是否支持通过方法参数来传递分页参数,默认值为
-
params:
- 自定义参数,可以通过此属性来覆盖默认的分页参数名称。例如:
count=countSql;pagehelper=pageHelper
,这里指定了计数查询语句中的 count 参数和分页助手的别名。
- 自定义参数,可以通过此属性来覆盖默认的分页参数名称。例如:
-
autoRuntimeDialect:
- 是否自动识别数据库方言,默认值为
false
。如果开启了这个选项,则不需要手动指定helperDialect
,插件会根据运行时的数据库连接信息自动选择合适的方言。
- 是否自动识别数据库方言,默认值为
-
closeConn:
- 执行分页后是否关闭连接,默认值为
true
。对于某些特殊场景,比如执行存储过程时,可能需要将此选项设为false
。
- 执行分页后是否关闭连接,默认值为
-
offsetAsPageNum:
- 是否把
offset
当作页码来使用,默认值为false
。如果设为true
,则分页插件会自动计算出正确的offset
和limit
。
- 是否把
-
rowBoundsWithCount:
- 是否进行记录总数查询,默认值为
false
。开启后每次分页都会自动查询一次总数,适用于需要显示总页数或总记录数的场合。
- 是否进行记录总数查询,默认值为
-
pageSizeZero:
- 当
pageSize = 0
或pageSize < 0
时,是否返回全部结果,默认值为false
。
- 当
-
reasonableAdjust:
- 是否启用合理的调整,默认值为
true
。它会影响reasonable
属性的行为,即当pageNum <= 0
或pageNum > pages
时如何处理。
- 是否启用合理的调整,默认值为
这些配置项可以帮助开发者更好地控制分页行为,确保分页逻辑符合具体的应用需求。通常情况下,默认配置已经能够满足大部分应用的需求,但在特定场景下适当的配置调整是必要的。
注意事项
- PageHelper 默认适用于 MySQL 数据库。如果使用其他类型的数据库,可能需要根据具体数据库调整分页插件的配置。
- 在多线程环境中使用 PageHelper 时要确保线程安全,因为分页参数是基于 ThreadLocal 存储的。
- 如果应用程序已经存在事务管理,则需要注意 PageHelper 分页操作与事务之间的交互,确保不会产生意外的行为。
相关文章:

【服务器】MyBatis是如何在java中使用并进行分页的?
MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 …...

vue 文本域 展示的内容格式要和填写时保持一致
文本域 展示的内容格式要和填写时保持一致 <el-inputtype"textarea":rows"5"placeholder"请输入内容"v-model"formCredit.point"style"width:1010px;" > </el-input> 样式加个: white-space: pre-w…...

linux-----进程及基本操作
进程的基本概念 定义:在Linux系统中,进程是正在执行的一个程序实例,它是资源分配和调度的基本单位。每个进程都有自己独立的地址空间、数据段、代码段、栈以及一组系统资源(如文件描述符、内存等)。进程的组成部分&am…...

[Python学习日记-73] 面向对象实战1——答题系统
[Python学习日记-73] 面向对象实战1——答题系统 简介 需求模型——5w1h8c 领域模型 设计模型 实现模型 案例:年会答题系统 简介 在学习完面向对象之后你会发现,你还是不会自己做软件做系统,这是非常正常的,这是因为计算机软…...

Win10将WindowsTerminal设置默认终端并添加到右键(无法使用微软商店)
由于公司内网限制,无法通过微软商店安装 Windows Terminal,本指南提供手动安装和配置新版 Windows Terminal 的步骤,并添加右键菜单快捷方式。 1. 下载新版终端安装包: 访问 Windows Terminal 的 GitHub 发布页面:https://githu…...

AOI外观缺陷检测机
主要功能: 快速检测产品装配缺陷,包括螺丝、元器件、端子排线、二维码、一维条码、识别读码、产品外观 Logo缺陷以及产品标签、字符缺陷检测等产品的缺陷检测。 设备优势:1.采用轻型可移动支架,可以快速对接产线工艺工序&am…...

精读 84页华为BLM战略规划方法论
这篇文档主要介绍了华为的BLM战略规划方法论,该方法论旨在帮助企业制定战略规划,并确保战略规划的可执行性和有效性。以下是该文档的核心知识点和重点需要关注的内容: 战略规划的定义:战略规划是企业依据企业外部环境和企业自身的…...
工业摄像机基于电荷耦合器件的相机
工业摄像机系列产品及其识别技术的详细介绍: 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息,并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性,适用于各种复杂的工业环境。 …...
13.罗意文面试
1、工程化与架构设计(考察项目管理和架构能力) 1.1 你负责的可视化编排项目中,如何设计组件的数据结构来支持"拖拉拽"功能?如何处理组件间的联动关系? // 组件数据结构示例 {components: [{id: comp1,type…...
xxljob window免安装
gitee地址: https://gitee.com/xuxueli0323/xxl-job idea打开 1、配置maven环境 2、修改数据库连接,网页端口 3、修改执行器中连接的网页端口 右侧-xxljob-生命周期-package 生成: D:\xxx\Gitee\xxl-job\xxl-job-admin\target 目录下 x…...

MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证
功能Oracle语法MariaDB语法Oracle执行结果MariaDB执行结果创建存储过程未使用参数和变量CREATE PROCEDURE p1 ASBEGINNULL;END p1;/ DELIMITER // CREATE PROCEDURE p1()ISBEGINNULL;END // DELIMITER ; 带有参数和变量CREATE PROCEDURE p1(p_input IN NUMBER, p_output OUT NU…...

【AI驱动的数据结构:包装类的艺术与科学】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object,为了…...

初学stm32 --- PWM输出
目录 STM32 PWM工作过程编辑 STM32 PWM工作过程(通道1为例) PWM模式1 & PWM模式2 向上计数配置说明编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 编辑 PWM输出相关库函数 输出比较初始化函数: 设置比较值函数&a…...
ES6学习Iterator遍历器(七)
这里写目录标题 一、概念1.1、遍历器1.2、作用1.3、遍历过程 二、代码学习 一、概念 JavaScript 原有的表示“集合”的数据结构,主要是数组( Array )和对象( Object ),ES6 又添加了 Map 和Set 。这样就有了…...

重建大师软件做任务提示引擎错误?
原因1:打开工程用的本地路径,导致访问失败;解决方案:用网络路径打开工程,重新提交空三。 原因2:引擎主机对工程目录没有访问权限;解决方案:找到相应的引擎主机设置访问权限 重建大…...

【图像分类实用脚本】数据可视化以及高数量类别截断
图像分类时,如果某个类别或者某些类别的数量远大于其他类别的话,模型在计算的时候,更倾向于拟合数量更多的类别;因此,观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…...
python的is和==运算符
在py中,有两个特别的运算符,is和分别用来判断两个变量是不是相同的和两个变量的值是不是相同。 1. is运算符:用来比较两个对象的身份,即判断两个变量是否指向内存中的同一个对象。 应用场景:1)单例模式&a…...

单节点calico性能优化
在单节点上部署calicov3273后,发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点,没有跨节点pod网段组网需要,禁用overlay方式网络(ipip,vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…...
React 19有哪些新特性?
写在前面 2024.12.5,React 团队在 react.dev/blog 上发表了帖子 react.dev/blog/2024/1… React 19 正式进入了 stable 状态 React 团队介绍了一些新的特性和 Breaking Changes,并提供了升级指南, React 19: 新更新、新特性和新Hooks Reac…...
视频生成缩略图
文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求,视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...