【服务器】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 分页操作与事务之间的交互,确保不会产生意外的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Phono3py hdf5文件数据读取与处理

Phono3py是一个主要用python写的声子-声子相互作用相关性质的模拟包&#xff0c;可以基于有限位移算法实现三阶力常数和晶格热导率的计算过程&#xff0c;同时输出包括声速&#xff0c;格林奈森常数&#xff0c;声子寿命和累积晶格热导率等参量。 相关介绍和安装请参考往期推荐…

centos7下docker 容器实现redis主从同步

1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…

ManimCommunity 设置背景颜色

ManimCommunity 设置背景颜色 flyfish 主要是这句 self.camera.background_color WHITE 完整代码 class OpeningManim(Scene):def construct(self):self.camera.background_color WHITE title Tex(r"This is some \LaTeX")basel MathTex(r"\sum_{n1}^\in…

【数值特性库】入口文件

数值特性库入口文件为lib.rs。该文件定义一系列数字特性的trait&#xff08;特征&#xff09;&#xff0c;这些特性可以被不同的数字类型实现&#xff0c;从而提供一套通用的数值操作方法。下面是对代码中关键部分的解释&#xff1a; 一、基础设置 #![doc(html_root_url “h…

matlab绘图时设置左、右坐标轴为不同颜色

目录 一、需求描述 二、实现方法 一、需求描述 当图中存在两条曲线&#xff0c;需要对两条曲线进行分别描述时&#xff0c;应设置左、右坐标轴为不同颜色&#xff0c;并设置刻度线&#xff0c;且坐标轴颜色需要和曲线颜色相同。 二、实现方法 1.1、可以实现&#xff1a; 1…

【数据可视化复习方向】

1.数据可视化就是数据中信息的可视化 2.数据可视化主要从数据中寻找三个方面的信息&#xff1a;模式、关系和异常 3.大数据可视化分类&#xff1a;科学可视化、信息可视化、可视分析学 4.大数据可视化作用&#xff1a;记录信息、分析推理、信息传播与协同 5.可视化流程&…

「配置应用的可见性」功能使用教程

引言 对于「应用可见性」这一概念&#xff0c;可能很多开发者小伙伴还不是很熟悉。简单举一个很典型的场景例子&#xff0c;当你开发的应用需要调起第三方应用时&#xff0c;这里就涉及到应用可见性的问题了&#xff0c;如果不配置相关的应用可见性&#xff0c;则你的应用是无…

Pytorch | 从零构建ResNet对CIFAR10进行分类

Pytorch | 从零构建ResNet对CIFAR10进行分类 CIFAR10数据集ResNet核心思想网络结构创新点优点应用 ResNet结构代码详解结构代码代码详解BasicBlock 类ResNet 类ResNet18、ResNet34、ResNet50、ResNet101、ResNet152函数 训练过程和测试结果代码汇总resnet.pytrain.pytest.py 前…

安装MongoDB,环境配置

官网下载地址&#xff1a;MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…

7.C语言 宏(Macro) 宏定义,宏函数

目录 宏定义 宏函数 1.注释事项 2.注意事项 宏(Macro)用法 常量定义 简单函数实现 类型检查 条件编译 宏函数计算参数个数 宏定义进行类型转换 宏定义进行位操作 宏定义进行断言 总结 宏定义 #include "stdio.h" #include "string.h" #incl…

基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享

作者&#xff1a;Hello,Panda 一、设计需求 设计一个4Lanes SLVS-EC桥接到2组4lanes MIPI DPHY接口的电路模块&#xff1a; &#xff08;1&#xff09;CMOS芯片&#xff1a;IMX537-AAMJ-C&#xff0c;输出4lanes SLVS-EC 4.752Gbps Lane速率&#xff1b; &#xff08;2&…

【漏洞复现】CVE-2023-29944 Expression Injection

漏洞信息 NVD - cve-2023-29944 Metersphere v1.20.20-lts-79d354a6 is vulnerable to Remote Command Execution. The system command reverse-shell can be executed at the custom code snippet function of the metersphere system workbench. 背景介绍 MeterSphere is…

Spring基础分析11-表单处理与验证

大家好&#xff0c;今天和大家一起讨论一下Spring的表单处理与验证相关内容~ 在现代Web开发中&#xff0c;表单处理和验证是至关重要的功能。Spring框架提供了一套强大的机制来处理和验证表单数据&#xff0c;使得我们能够更加专注于业务逻辑的实现&#xff0c;而不需要担心底…

在VBA中结合正则表达式和查找功能给文档添加交叉连接

在VBA中搜索文本有两种方式可用&#xff0c;一种是利用Range.Find对象&#xff08;更常见的形式可能是Selection.Find&#xff0c;Selection是Range的子类&#xff0c;Selection.Find其实就是特殊的Range.Find&#xff09;&#xff0c;另一种方法是利用正则表达式&#xff0c;但…

AW36518芯片手册解读(3)

接前一篇文章&#xff1a;AW36518芯片手册解读&#xff08;2&#xff09; 二、详述 3. 功能描述 &#xff08;1&#xff09;上电复位 当电源电压VIN降至预定义电压VPOR&#xff08;典型值为2.0V&#xff09;以下时&#xff0c;该设备会产生复位信号以执行上电复位操作&#x…

路径规划之启发式算法之二十一:禁忌搜索算法(Tabu Search,TS)

禁忌搜索算法(Tabu Search,TS)是一种元启发式(meta-heuristic)随机搜索算法,由美国科罗拉多大学教授Fred Glover在1986年左右提出。它主要用于解决优化问题,特别是那些具有大规模搜索空间的问题。禁忌搜索算法的核心思想是通过引入一种灵活的“记忆”技术,即禁忌表(Ta…

Linux中更改某些软件的设置(树莓派系统可用)

文章目录 描述方法&#xff1a; 描述 在Linux或者树莓派的系统中&#xff0c;要更改某个文件的设置&#xff0c;一般需要去更改该文件对应的配置文件&#xff0c; 一般来说&#xff0c;Linux中的配置文件大多位于/etc目录下。这个目录包含了各种各样的重要配置文件&#xff0…

【mysql】唯一性约束unique

文章目录 唯一性约束1. 作用2. 关键字3. 特点4. 添加唯一约束5. 关于复合唯一约束 唯一性约束 1. 作用 用来限制某个字段/某列的值不能重复。 2. 关键字 UNIQUE3. 特点 同一个表可以有多个唯一约束。唯一约束可以是某一个列的值唯一&#xff0c;也可以多个列组合的值唯一。…

【人工智能】用Python实现情感分析:从简单词典到深度学习方法的演进

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 情感分析是自然语言处理(NLP)中的一个重要任务,其目的是通过分析文本内容,识别出其中的情感极性,如正面、负面或中性。随着技术的不断…

实操给桌面机器人加上超拟人音色

前面我们讲了怎么用CSK6大模型开发板做一个桌面机器人充当AI语音助理&#xff0c;近期上线超拟人方案&#xff0c;不仅大模型语音最快可以1秒内回复&#xff0c;还可以让我们的桌面机器人使用超拟人音色、具备声纹识别等能力&#xff0c;本文以csk6大模型开发板为例实操怎么把超…