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

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)到数据库中的记录。

MyBatis的特点

  1. SQL 分离:MyBatis 将 SQL 语句从 Java 代码中分离出来,通常放在 XML 文件中,使得 SQL 更加清晰,并且便于维护。

  2. 灵活的映射:提供强大的映射功能,能够将 SQL 查询的结果直接映射到 Java 对象(POJOs),包括一对一、一对多等复杂关系映射。

  3. 动态 SQL:支持基于 OGNL 表达式的动态 SQL 构建,允许根据不同的条件生成不同的 SQL 语句。

  4. 插件机制:通过插件机制可以对 SQL 执行过程进行拦截和增强,比如实现分页、缓存等功能。

  5. 与 Spring 集成:易于与 Spring 等主流框架集成,提供事务管理和依赖注入的支持。

  6. 数据库独立性:尽管 MyBatis 不像 Hibernate 那样提供完全的 ORM 解决方案,但它仍然可以在不同类型的数据库之间保持较高的移植性,只需要调整相应的 SQL 语句或使用插件如 PageHelper 来适配特定数据库的方言。

  7. 性能优化:由于它是半自动化的持久层框架,开发者可以根据需要手动编写高效的 SQL,从而获得更好的性能。

在 Java 中使用 MyBatis 进行分页

在 Java 中使用 MyBatis 进行分页查询,通常会结合数据库的分页功能或使用第三方插件如 PageHelper 来简化分页逻辑。以下是使用 PageHelper 插件进行分页的基本步骤:

  1. 引入依赖
    首先,在项目的 pom.xml 文件中添加 PageHelper 和 MyBatis 的依赖。

  2. 配置 PageHelper
    在 MyBatis 的配置文件中配置 PageHelper 插件,例如在 mybatis-config.xml 中添加如下配置:

    <plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 配置参数 --></plugin>
    </plugins>
    
  3. 编写 Mapper 接口
    创建对应的 Mapper 接口,并定义需要执行的查询方法。例如:

    public interface UserMapper {List<User> selectUsers();
    }
    
  4. 使用 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);
    
  5. 处理分页结果
    使用 PageInfo 类来获取分页后的数据,包括总记录数、总页数、当前页的数据列表等信息。

PageHelper插件配置

PageHelper 插件提供了丰富的配置选项来满足不同的分页需求。这些配置项可以在 MyBatis 的全局配置文件(如 mybatis-config.xml)中定义,或者在启动 PageHelper 时通过代码方式设置。以下是 PageHelper 的一些主要配置参数:

  1. helperDialect

    • 数据库方言,用于告诉插件使用哪种数据库的分页语法。例如:mysql, oracle, sqlserver 等。如果未指定,插件会自动检测当前数据库的方言,但推荐显式指定以避免潜在问题。
  2. reasonable

    • 分页合理化,默认值为 false。开启后,当 pageNum <= 0 时会自动调整为第一页;当 pageNum > pages (总页数)时会自动调整为最后一页。
  3. supportMethodsArguments

    • 是否支持通过方法参数来传递分页参数,默认值为 false。开启后可以不使用 PageHelper.startPage 方法,而是直接在 Mapper 接口的方法中添加分页参数。
  4. params

    • 自定义参数,可以通过此属性来覆盖默认的分页参数名称。例如:count=countSql;pagehelper=pageHelper,这里指定了计数查询语句中的 count 参数和分页助手的别名。
  5. autoRuntimeDialect

    • 是否自动识别数据库方言,默认值为 false。如果开启了这个选项,则不需要手动指定 helperDialect,插件会根据运行时的数据库连接信息自动选择合适的方言。
  6. closeConn

    • 执行分页后是否关闭连接,默认值为 true。对于某些特殊场景,比如执行存储过程时,可能需要将此选项设为 false
  7. offsetAsPageNum

    • 是否把 offset 当作页码来使用,默认值为 false。如果设为 true,则分页插件会自动计算出正确的 offsetlimit
  8. rowBoundsWithCount

    • 是否进行记录总数查询,默认值为 false。开启后每次分页都会自动查询一次总数,适用于需要显示总页数或总记录数的场合。
  9. pageSizeZero

    • pageSize = 0pageSize < 0 时,是否返回全部结果,默认值为 false
  10. reasonableAdjust

    • 是否启用合理的调整,默认值为 true。它会影响 reasonable 属性的行为,即当 pageNum <= 0pageNum > pages 时如何处理。

这些配置项可以帮助开发者更好地控制分页行为,确保分页逻辑符合具体的应用需求。通常情况下,默认配置已经能够满足大部分应用的需求,但在特定场景下适当的配置调整是必要的。
在这里插入图片描述

注意事项

  • PageHelper 默认适用于 MySQL 数据库。如果使用其他类型的数据库,可能需要根据具体数据库调整分页插件的配置。
  • 在多线程环境中使用 PageHelper 时要确保线程安全,因为分页参数是基于 ThreadLocal 存储的。
  • 如果应用程序已经存在事务管理,则需要注意 PageHelper 分页操作与事务之间的交互,确保不会产生意外的行为。

相关文章:

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO&#xff08;Plain Old Java Objects&#xff0c;普通老式 …...

vue 文本域 展示的内容格式要和填写时保持一致

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

linux-----进程及基本操作

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

[Python学习日记-73] 面向对象实战1——答题系统

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

Win10将WindowsTerminal设置默认终端并添加到右键(无法使用微软商店)

由于公司内网限制&#xff0c;无法通过微软商店安装 Windows Terminal&#xff0c;本指南提供手动安装和配置新版 Windows Terminal 的步骤&#xff0c;并添加右键菜单快捷方式。 1. 下载新版终端安装包: 访问 Windows Terminal 的 GitHub 发布页面&#xff1a;https://githu…...

AOI外观缺陷检测机

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

精读 84页华为BLM战略规划方法论

这篇文档主要介绍了华为的BLM战略规划方法论&#xff0c;该方法论旨在帮助企业制定战略规划&#xff0c;并确保战略规划的可执行性和有效性。以下是该文档的核心知识点和重点需要关注的内容&#xff1a; 战略规划的定义&#xff1a;战略规划是企业依据企业外部环境和企业自身的…...

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍&#xff1a; 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息&#xff0c;并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性&#xff0c;适用于各种复杂的工业环境。 …...

13.罗意文面试

1、工程化与架构设计&#xff08;考察项目管理和架构能力&#xff09; 1.1 你负责的可视化编排项目中&#xff0c;如何设计组件的数据结构来支持"拖拉拽"功能&#xff1f;如何处理组件间的联动关系&#xff1f; // 组件数据结构示例 {components: [{id: comp1,type…...

xxljob window免安装

gitee地址&#xff1a; https://gitee.com/xuxueli0323/xxl-job idea打开 1、配置maven环境 2、修改数据库连接&#xff0c;网页端口 3、修改执行器中连接的网页端口 右侧-xxljob-生命周期-package 生成&#xff1a; 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驱动的数据结构:包装类的艺术与科学】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object&#xff0c;为了…...

初学stm32 --- PWM输出

目录 STM32 PWM工作过程​编辑 STM32 PWM工作过程&#xff08;通道1为例&#xff09; PWM模式1 & PWM模式2 向上计数配置说明​编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 ​编辑 PWM输出相关库函数 输出比较初始化函数&#xff1a; 设置比较值函数&a…...

ES6学习Iterator遍历器(七)

这里写目录标题 一、概念1.1、遍历器1.2、作用1.3、遍历过程 二、代码学习 一、概念 JavaScript 原有的表示“集合”的数据结构&#xff0c;主要是数组&#xff08; Array &#xff09;和对象&#xff08; Object &#xff09;&#xff0c;ES6 又添加了 Map 和Set 。这样就有了…...

重建大师软件做任务提示引擎错误?

原因1&#xff1a;打开工程用的本地路径&#xff0c;导致访问失败&#xff1b;解决方案&#xff1a;用网络路径打开工程&#xff0c;重新提交空三。 原因2&#xff1a;引擎主机对工程目录没有访问权限&#xff1b;解决方案&#xff1a;找到相应的引擎主机设置访问权限 重建大…...

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…...

python的is和==运算符

在py中&#xff0c;有两个特别的运算符&#xff0c;is和分别用来判断两个变量是不是相同的和两个变量的值是不是相同。 1. is运算符&#xff1a;用来比较两个对象的身份&#xff0c;即判断两个变量是否指向内存中的同一个对象。 应用场景&#xff1a;1&#xff09;单例模式&a…...

单节点calico性能优化

在单节点上部署calicov3273后&#xff0c;发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点&#xff0c;没有跨节点pod网段组网需要&#xff0c;禁用overlay方式网络(ipip&#xff0c;vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…...

React 19有哪些新特性?

写在前面 2024.12.5&#xff0c;React 团队在 react.dev/blog 上发表了帖子 react.dev/blog/2024/1… React 19 正式进入了 stable 状态 React 团队介绍了一些新的特性和 Breaking Changes&#xff0c;并提供了升级指南&#xff0c; React 19: 新更新、新特性和新Hooks Reac…...

视频生成缩略图

文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求&#xff0c;视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

MMaDA: Multimodal Large Diffusion Language Models

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

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

七、数据库的完整性

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