【服务器】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.rhkb.cn/news/493216.html

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

相关文章

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有用。 流式传输的特点是将数据逐步传输给客…

【Tomcat】第六站(最后一站啦!):数据的返回

1. 引言 前端资源比如html页面&#xff0c;进行返回。截止到目前我们写的项目架构不支持前端页面&#xff08;静态资源 &#xff09;。 2. 数据的返回 2.1 准备 为了能够写前端页面&#xff0c;新建一个项目。选择Maven项目&#xff0c;下一步&#xff0c;下一步。 加载完…

electron-vite【实战系列教程】

创建项目 https://blog.csdn.net/weixin_41192489/article/details/144442262 安装必要的插件 UI 库 element-plus npm install element-plus --save安装 element-plus 图标 npm install element-plus/icons-vue安装插件 – 自动注册组件 vs 自动导入框架方法 npm install -…

信号处理相关的东东(学习解惑)

信号处理相关的东东&#xff08;学习解惑&#xff09; 所有内容学习自知乎专栏&#xff0c;https://www.zhihu.com/column/xinhao&#xff0c;写的很好&#xff0c;值得反复学习 时频域分析的一些常用概念 FROM&#xff1a;https://zhuanlan.zhihu.com/p/35742606 1、相加性…

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

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

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

SQL语句整理五-StarRocks

文章目录 查看版本号&#xff1a;SPLIT&#xff1a;insert 和 update 结合 select&#xff1a;报错&#xff1a;1064 - StarRocks planner use long time 3000 ms in memo phase&#xff1a;字段增删改&#xff1a; 查看版本号&#xff1a; select current_version(); current…

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球&#xff0c;数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践&#xff0c;推动打造行业交流平台&#xff0c;驱动产业创新共荣&#xff0c;2024 年 12 月 18 日 -19 日&#xff0c;由中国通信标准化协会主办的“20…

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…

【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯

关键词&#xff1a;鸿蒙、ArkTs、Web组件、通讯、数据 官方文档Web组件用法介绍&#xff1a;文档中心 Web 组件加载沙箱中页面可参考我的另一篇文章&#xff1a;【HarmonyOS NEXT】 如何将rawfile中文件复制到沙箱中_鸿蒙rawfile 复制到沙箱-CSDN博客 目录 如何在鸿蒙应用中加…

使用k6进行MongoDB负载测试

1.安装环境 安装xk6-mongo扩展 ./xk6 build --with github.com/itsparser/xk6-mongo 2.安装MongoDB 参考Docker安装MongoDB服务-CSDN博客 连接成功后新建test数据库和sample集合 3.编写脚本 test_mongo.js import xk6_mongo from k6/x/mongo;const client xk6_mongo.new…

电子应用设计方案-63:智能升降茶几系统方案设计

智能升降茶几系统方案设计 一、引言 智能升降茶几作为一种创新的家具产品&#xff0c;结合了实用性和功能性&#xff0c;能够满足不同场景下的使用需求。本方案旨在设计一款安全可靠、操作便捷、功能丰富的智能升降茶几。 二、系统概述 1. 系统目标 - 实现茶几桌面的平稳升降&…

C语言进阶(2) ---- 指针的进阶

前言&#xff1a;指针的主题&#xff0c;我们在初阶的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2.指针的大小是固定的4/8个字节(32位平台/64位平台)。 3.指针是…

OpenHarmony-4.HDI 框架

HDI 框架 1.HDI介绍 HDI&#xff08;Hardware Device Interface&#xff0c;硬件设备接口&#xff09;是HDF驱动框架为开发者提供的硬件规范化描述性接口&#xff0c;位于基础系统服务层和设备驱动层之间&#xff0c;是连通驱动程序和系统服务进行数据流通的桥梁&#xff0c;是…

[网络安全]XSS之Cookie外带攻击姿势详析

概念 XSS 的 Cookie 外带攻击就是一种针对 Web 应用程序中的 XSS&#xff08;跨站脚本攻击&#xff09;漏洞进行的攻击&#xff0c;攻击者通过在 XSS 攻击中注入恶意脚本&#xff0c;从而窃取用户的 Cookie 信息。 攻击者通常会利用已经存在的 XSS 漏洞&#xff0c;在受害者的…

MySQL复制问题和解决

目录 环境介绍 一&#xff0c;主库执行delete&#xff0c;从库没有该数据 模拟故障 修复故障 二&#xff0c;主库执行insert&#xff0c;从库已存在该数据 模拟故障 故障恢复 三&#xff0c;主库执行update&#xff0c;从库没有该数据 模拟故障 故障恢复 四&#xf…

基于Springboot人口老龄化社区服务与管理平台【附源码】

基于Springboot人口老龄化社区服务与管理平台 效果如下&#xff1a; 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧&#xff0c;老年人口比例逐渐增加&#xff0c;对老年…

Linux文件:动静态库制作 动态库链接原理解析

Linux文件&#xff1a;动静态库制作 & 动态库链接原理解析&#xff08;Centos7&#xff09; 前言一、静态库制作1.1 静态库制作方法1.2 实例1.3 用户使用模拟1.3.1 大致框架1.3 链接第3方库文件 二、动态库制作2.1 动态库制作方法 2.2 操作系统查找动态库2.2.1 直接安装到系…