MyBatis首篇-入门第一文

news2024/12/27 13:31:04

目录

  • MyBatis
    • 关键特性和概念
    • 使用步骤
      • 简单示例
    • 核心组件
    • 主要特点
    • 常见使用情景
    • 常见优化策略

MyBatis

MyBatis是一个优秀的半自动化持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了大部分JDBC代码和手动设置参数以及获取结果集的繁琐性。用户只需要定义SQL映射语句和映射文件,MyBatis就能将Java对象和数据库表直接关联起来。
MyBatis中文官网
在这里插入图片描述

关键特性和概念

  1. SQL 映射:MyBatis 允许你将 SQL 语句映射到 Java 方法上,这可以通过 XML 配置文件或注解来实现。

  2. 接口驱动:MyBatis 通过接口(Interface)来定义数据库操作,而不是继承一个基类或实现一个接口。你只需要定义接口,MyBatis 会自动实现这个接口。

  3. 动态 SQL:MyBatis 支持动态 SQL,这意味着你可以在运行时构建 SQL 语句,根据条件动态地包含或排除某些语句部分。

  4. 结果映射:MyBatis 能够将数据库查询结果自动映射到 Java 对象中。你可以通过 XML 或注解来定义结果映射。

  5. 缓存机制:MyBatis 提供了一级缓存(Session 级别)和二级缓存(Mapper 级别),以提高性能。

  6. 事务管理:MyBatis 支持声明式事务管理,可以与 Spring 框架集成,实现更高级的事务控制。

  7. 配置和映射文件:MyBatis 的配置通常在 mybatis-config.xml 文件中进行,而 SQL 映射则在单独的 XML 文件中定义。

  8. MyBatis 3:MyBatis 3 引入了新的映射器接口,支持自动映射、关联映射、混合配置等特性。

  9. 插件系统:MyBatis 允许开发者编写自定义插件,以拦截执行过程,实现日志记录、性能监控等功能。

  10. 集成 Spring:MyBatis 可以与 Spring 框架无缝集成,利用 Spring 的依赖注入和事务管理功能。
    在这里插入图片描述

使用步骤

  1. 添加依赖

    • 在你的项目中添加 MyBatis 以及数据库驱动的依赖。如果你使用的是 Maven,需要在 pom.xml 文件中添加相应的依赖项。
  2. 配置 MyBatis

    • 创建 mybatis-config.xml 配置文件,配置 MyBatis 的基本设置,如数据库连接信息、映射文件位置等。
  3. 定义数据模型

    • 创建 Java 类来表示数据库中的表。这些类通常被称为 POJO(Plain Old Java Objects)。
  4. 创建映射器接口

    • 定义一个或多个接口,这些接口的方法将映射到数据库操作。
  5. 编写映射文件

    • 使用 XML 映射文件来编写 SQL 语句,并将其与映射器接口的方法关联起来。
  6. 配置数据源

    • 在项目中配置数据库连接,这可以通过 JDBC 的 DataSource 或使用连接池(如 HikariCP、C3P0)来实现。
  7. 创建 SqlSessionFactory

    • 使用 MyBatis 的 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 实例。
  8. 获取 SqlSession

    • 通过 SqlSessionFactory 获取 SqlSession 对象,它是执行数据库操作的主要对象。
  9. 执行操作

    • 使用 SqlSession 来调用映射器接口中定义的方法,执行数据库操作。
  10. 处理事务

    • 管理事务,可以手动控制事务的提交和回滚,或者使用 Spring 框架的声明式事务管理。
  11. 关闭 SqlSession

    • 操作完成后,关闭 SqlSession 以释放数据库连接。

简单示例

这里我附上有一个简单的示例,展示如何使用 MyBatis

<!-- mybatis-config.xml -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>
// User.java
public class User {
    private int id;
    private String username;
    // getters and setters
}

// UserMapper.java
public interface UserMapper {
    User selectUser(int id);
}

// UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.UserMapper">
    <select id="selectUser" resultType="org.mybatis.example.User">
        SELECT id, username FROM users WHERE id = #{id}
    </select>
</mapper>
// MyBatisTest.java
public class MyBatisTest {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(new FileInputStream("mybatis-config.xml"));
        try (SqlSession session = factory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.selectUser(1);
            System.out.println(user.getUsername());
        }
    }
}

在这里插入图片描述

核心组件

  1. SqlSessionFactory

    • SqlSessionFactory 是 MyBatis 架构中的核心,它是通过 SqlSessionFactoryBuilder 从 MyBatis 配置文件中构建出来的。它负责创建 SqlSession 实例,并且持有配置信息和数据库连接信息。
  2. SqlSession

    • SqlSession 是 MyBatis 中执行持久化操作的主要对象。它提供了执行 SQL 语句的方法,如 selectOneselectListinsertupdatedelete 等。每个 SqlSession 都是线程安全的,但最佳实践是使用完立即关闭。
  3. Mapper 接口

    • Mapper 接口是用户自定义的接口,它定义了应用层想要执行的数据库操作。MyBatis 通过动态代理机制实现这些接口,将调用委托给 SqlSession 来执行实际的数据库操作。
  4. 映射文件

    • 映射文件包含了 SQL 语句和结果映射的定义。MyBatis 允许使用 XML 文件或注解来定义 SQL 映射。XML 映射文件通常包含 <select><insert><update><delete> 等元素。
  5. Configuration

    • Configuration 类持有 MyBatis 的所有配置信息,包括数据库连接信息、映射文件路径、环境设置、事务管理器等。它在 SqlSessionFactory 中被创建和维护。
  6. Executor

    • Executor 是 MyBatis 中执行 SQL 语句的组件。它负责 SQL 语句的生成、查询缓存的查询以及事务的提交和回滚。
  7. StatementHandler

    • StatementHandler 负责处理 JDBC StatementPreparedStatement 的操作,将 MyBatis 的调用转化为 JDBC 可以理解的 SQL 执行语句。
  8. ParameterHandler

    • ParameterHandler 负责处理 SQL 语句的参数,将传入的参数映射到 SQL 语句的占位符上。
  9. ResultSetHandler

    • ResultSetHandler 负责处理 JDBC 的 ResultSet,将查询结果转换为 Java 对象。
  10. TypeHandler

    • TypeHandler 是 MyBatis 中用于处理 Java 类型和 JDBC 类型之间映射的组件。MyBatis 内建了许多常用的 TypeHandler,同时也支持自定义 TypeHandler
  11. ObjectFactory

    • ObjectFactory 负责创建映射对象的实例,当 MyBatis 需要实例化对象时使用。
  12. Plugin

    • MyBatis 的插件机制允许开发者通过拦截器的方式介入 MyBatis 的运行过程,实现日志记录、性能监控等功能。
  13. BoundSql

    • BoundSql 包含了 SQL 语句的最终形式以及参数信息,它在执行 SQL 之前生成,并可以用于日志记录或展示实际执行的 SQL。
  14. Cache

    • MyBatis 的缓存组件,包括一级缓存(SqlSession 级别)和二级缓存(全局 Mapper 级别),用于存储查询结果以提高性能。

在这里插入图片描述

主要特点

  1. SQL 映射:MyBatis 允许你将 SQL 语句直接映射到 Java 方法上,提供了 XML 和注解两种方式来定义 SQL 映射。

  2. 接口驱动:MyBatis 使用 Java 接口来定义数据库操作,而不是继承一个基类或实现一个接口。这使得代码更加简洁和易于维护。

  3. 动态 SQL:MyBatis 支持动态 SQL,你可以使用 if、choose、when、otherwise 等标签来构建条件 SQL,实现复杂的逻辑。

  4. 结果映射:MyBatis 能够将数据库查询结果映射到 Java 对象中,支持复杂的嵌套结果映射,如一对多、多对多关系。

  5. 缓存机制:MyBatis 提供了一级缓存(SqlSession 级别)和二级缓存(全局 Mapper 级别),可以显著提高应用程序的性能。

  6. 事务管理:MyBatis 支持 JDBC 事务管理,并且可以与 Spring 框架集成,使用 Spring 的声明式事务管理。

  7. 配置和映射文件:MyBatis 的配置和 SQL 映射可以分开定义,配置文件通常为 mybatis-config.xml,SQL 映射文件为单独的 XML 文件。

  8. MyBatis 3 特性:MyBatis 3 引入了新的映射器接口,支持自动映射、关联映射、混合配置等特性。

  9. 插件系统:MyBatis 允许开发者编写自定义插件,以拦截执行过程,实现日志记录、性能监控等功能。

  10. 集成 Spring:MyBatis 可以与 Spring 框架无缝集成,利用 Spring 的依赖注入和事务管理功能。

  11. 灵活性:MyBatis 提供了丰富的 API 和配置选项,可以根据项目需求进行灵活配置。

  12. 性能:MyBatis 的执行计划可以被优化,通过合理的配置和使用缓存机制,可以提高数据库操作的性能。

  13. 社区支持:MyBatis 拥有一个活跃的社区,提供了大量的文档、教程和第三方库支持。

  14. 可扩展性:MyBatis 的架构设计允许开发者通过继承和实现接口来扩展框架的功能。

  15. 跨数据库支持:MyBatis 不依赖于特定的数据库,可以与多种数据库系统集成。
    在这里插入图片描述

常见使用情景

  1. 复杂 SQL 操作

    • 当项目需要执行复杂的 SQL 语句,如多表联合查询、复杂的子查询等,MyBatis 提供的动态 SQL 功能可以很好地满足这些需求。
  2. 细粒度的数据库控制

    • 如果需要对数据库操作进行精细控制,例如精确的 SQL 调优、特殊的数据库函数调用等,MyBatis 允许开发者编写具体的 SQL 语句来实现。
  3. 遗留系统的集成

    • 在需要集成遗留系统或者使用现有的 SQL 存储过程时,MyBatis 可以很容易地与这些系统集成。
  4. 性能优化

    • 对于性能要求较高的应用程序,MyBatis 的缓存机制可以帮助减少数据库的访问次数,提高应用性能。
  5. 数据库迁移

    • 当进行数据库迁移或者需要支持多种数据库时,MyBatis 的灵活性可以帮助开发者更容易地适配不同的数据库。
  6. 数据模型映射

    • 对于需要将数据库表映射到 Java 对象的场景,MyBatis 的结果映射功能可以简化对象和数据库之间的转换。
  7. 报表生成

    • 在需要生成复杂报表的应用中,MyBatis 可以执行复杂的 SQL 查询并映射结果到 Java 对象,方便进行进一步的处理。
  8. RESTful API 开发

    • 在开发 RESTful 服务时,MyBatis 可以作为后端数据访问层,提供灵活的数据操作接口。
  9. 与 Spring 框架集成

    • 当使用 Spring 框架开发 Java 应用时,MyBatis 可以与 Spring 的事务管理、依赖注入等特性无缝集成。
  10. 单元测试

    • MyBatis 支持使用接口而不是具体类,这使得编写单元测试变得更加容易,因为可以轻松地模拟这些接口。
  11. 数据访问抽象

    • 在需要抽象数据访问层,以便在不同的数据源之间切换时,MyBatis 提供了一种简单的方式来实现数据访问逻辑的抽象。
  12. 多租户应用

    • 在多租户应用中,MyBatis 可以根据不同租户的需求定制 SQL 语句,实现租户特定的数据操作。
  13. 大数据量处理

    • 对于需要处理大量数据的应用,MyBatis 可以通过分批处理、游标等技术来优化性能。
  14. 定制化数据库操作

    • 当需要执行一些特殊的数据库操作,如自定义的数据库函数或存储过程时,MyBatis 提供了足够的灵活性来实现这些操作。
      在这里插入图片描述

常见优化策略

MyBatis 性能优化是一个多方面的过程,涉及到配置、代码编写、数据库操作等多个层面。

  1. 合理使用缓存

    • 利用 MyBatis 的一级缓存(SqlSession 缓存)和二级缓存(全局 Mapper 缓存)来减少对数据库的访问次数。确保缓存策略与应用场景相匹配。
  2. 减少不必要的查询

    • 避免在循环中执行查询操作,尽量使用批量查询来减少数据库访问次数。
  3. 使用批量操作

    • 对于插入、更新或删除操作,使用批量操作可以显著提高性能,减少数据库交互次数。
  4. 优化 SQL 语句

    • 确保 SQL 语句是经过优化的,避免使用 SELECT *,尽量指定需要的列,减少数据传输量。
  5. 使用分页查询

    • 当处理大量数据时,使用分页查询可以减少一次性加载的数据量,提高响应速度。
  6. 合理使用延迟加载

    • 对于关联查询,根据需要使用延迟加载(懒加载)和立即加载(急加载),避免不必要的数据加载。
  7. 减少反射和动态代理的使用

    • 反射和动态代理可能会影响性能,尽量减少它们的使用。
  8. 优化 MyBatis 配置

    • 根据应用需求调整 MyBatis 配置,例如调整 Executor 类型(SIMPLE、REUSE、BATCH)。
  9. 使用连接池

    • 使用数据库连接池来管理数据库连接,减少连接创建和销毁的开销。
  10. 优化事务管理

    • 确保事务的大小适当,避免过长的事务,减少锁定资源的时间。
  11. 使用 MyBatis 插件

    • 利用 MyBatis 插件机制,例如分页插件,可以简化分页查询的实现并提高性能。
  12. 监控和分析

    • 使用监控工具来分析 SQL 执行计划和性能瓶颈,根据分析结果进行优化。
  13. 避免大对象的序列化

    • 在使用 MyBatis 的缓存或进行数据库操作时,避免序列化大对象,这可能会影响性能。
  14. 合理配置数据库

    • 根据数据库的性能特点进行配置,例如调整缓冲区大小、连接数等。
  15. 减少上下文切换

    • 避免在 SqlSession 中进行大量的提交和关闭操作,这可能会导致上下文切换的开销。
  16. 使用内置的 MyBatis 函数

    • 利用 MyBatis 提供的内置函数,如 foreachifchoosewhenotherwise 等,来编写更高效的 SQL。
  17. 避免过度使用动态 SQL

    • 动态 SQL 虽然提供了灵活性,但过度使用可能会导致 SQL 语句复杂,难以优化。
  18. 合理使用 MyBatis 注解

    • 使用注解可以减少 XML 配置的冗余,但注解的使用也应适度,以避免过度复杂化。

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

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

相关文章

机器学习/深度学习——模型的欠拟合和过拟合,正则化方法详解

机器学习/深度学习——模型的欠拟合和过拟合&#xff0c;正则化方法 详解 搭配以下文章进行学习&#xff1a; 卷积神经网络&#xff1a; 深度学习——卷积神经网络&#xff08;convolutional neural network&#xff09;CNN详解&#xff08;一&#xff09;——概述. 步骤清晰…

WHD温湿度控制器:智能守护,让电力设备远离“温湿”困扰,安全运行每一刻

​在电力系统的庞大网络中&#xff0c;中高压开关柜、端子箱、环网柜及箱变等关键设备&#xff0c;其稳定运行直接关系到电力供应的安全与效率。WHD系列温湿度控制器以智能化、精准化的温湿管理方案&#xff0c;为电力设备筑起了一道坚不可摧的安全防线。 WHD系列温湿度控制器搭…

【Spring Boot】全局异常处理

目录 背景 前言 设计步骤 1.定义异常信息类&#xff1a; 2.自定义异常&#xff1a; 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中&#xff0c;如何处理全局异常的&#xff0c;也就是如何捕获全局异…

软件包管理器以及NFS

一.YUM 1.1 YUM介绍 学习YUM 软件仓库&#xff0c;可以完成安装、卸载、自动升级 rpm 软件包等任务&#xff0c;能够自动 查找并解决 rpm 包之间的依赖关系&#xff0c;而无须管理员逐个、手工地去安装每个 rpm 包&#xff0c;使管 理员在维护大量 Linux 服务 器时更加轻松自…

MS Visual Studio使用ACLLib库

目录 前言 二、MS Visual Studio使用ACLLib库 1.拿到库文件 2.新建VS项目 1&#xff09;打开VS Studio 2&#xff09;新建Windos 桌面向导文件 3&#xff09;创建 4&#xff09;选择空项目 5&#xff09; 新建main.c文件 3.将得到的acllib.c 与 acllib.h文件复制到项目…

HNU-2024计算机系统-小班讨论6

写在前面&#xff1a; 本次讨论课的选题主要围绕着程序性能优化章节中的分支预测部分&#xff0c;我个人感觉这板块是CSAPP教材中最不好理解的部分&#xff0c;需要大家多看教材&#xff0c;多讨论分析。 本文所有题目由全组同学共同完成&#xff0c;感谢每一位同学的支持与付…

【C++】序列与关联容器(二)序列容器

【C】序列与关联容器&#xff08;二&#xff09;序列容器 一、C 标准库中的序列容器模板二、array 容器模板三、vector元素模板 一、C 标准库中的序列容器模板 每种容器的实现方法的难易不同&#xff0c;特性不同&#xff0c;适用的应用场景不同 array &#xff1a;元素个数固…

11.4.软件系统分析与设计-算法的分析与设计

算法的分析与设计 涉及到的考点&#xff1a; C语言数据结构(树、链表)–考的不多时间复杂度和空间复杂度的计算排序算法四大经典算法 程序设计语言的基本成分 数据成分&#xff1a;指一种程序设计语言的数据和数据类型。数据分为常量&#xff08;程序运行时不可改变&#x…

让IP实现https访问的方法

IP SSL证书是主要保护公网ip地址的一种专属信任SSL证书&#xff0c;相比而言IP SSL证书体现的定位很明确。 IP SSL证书是一种数字证书&#xff0c;用于保护网络服务器和网络浏览器之间的通信。它是由受信任的证书颁发机构(CA)颁发的安全套接字层(SSL)证书。证书用于验证服务器…

day 26网络编程—协议

1、协议&#xff1a;通信双方约定的一套标准 2、国际网络通信协议标准&#xff1a; 1.OSI协议&#xff1a; 应用层 发送的数据内容 表示层 数据是否加密 会话层 是否建立会话连接 传输层 数据传输的…

丑数的计算

丑数 就是只包含质因数 2、3 和 5 的正整数。 给你一个整数 n &#xff0c;请你判断 n 是否为 丑数 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;n 6 输出&#xff1a;true 解释&#xff1a;6 2 3 示…

Linux---DHCP和FTP(原理+实操)

文章目录 DHCP和FTP&#xff08;原理实操&#xff09;DHCP使用DHCP&#xff08;自动分配IP&#xff09;的好处分配方式租约过程第一次重新登录更新租约DHCP服务可分配的地址信息主要包括 DHCP安装和配置实验目的实验环境:网络环境:系统环境:具体操作实操注意一、将三台虚拟机网…

数据结构——排序(4):归并排序+计数排序

目录 一、归并排序 &#xff08;1&#xff09;思想 &#xff08;2&#xff09;过程图示 &#xff08;3&#xff09;代码实现 (4) 代码解释 &#xff08;5&#xff09;复杂度 二、非比较排序&#xff08;计数排序&#xff09; &#xff08;1&#xff09;操作步骤 &#x…

《新一代数据可视化分析工具应用指南》正式开放下载

2024年8月12日&#xff0c;由DataEase开源项目组编写的《新一代数据可视化分析工具应用指南》白皮书正式面向广大用户开放下载。 《新一代数据可视化分析工具应用指南》是DataEase开源项目组为了支持企业落地并推广BI工具、推进企业数据可视化建设而编著的指导手册。通过本白皮…

【生成式人工智能-十二-影像生成原理】

文字生成影像的原理 影像生成的应用影像 是怎么生成的图片生成图片&#xff1a;影像生成影像文字生成图片按照文字AT的方式生成NAT 文字生成视频 怎么评价影像生成的好坏引入CLIP模型文字生成图片的难点文字生成视频的难点解决办法减少attention数目分迭代生成 前段时间sora生成…

前端字体没有授权,字体版权检测(是否为方正字体)

1.截图系统中的首页和登录页面&#xff0c;主要是有字体的地方 2.在线字体版权检测地址&#xff1a;字体版权自动检测-求字体网 3.上传照片&#xff0c;开始对图片进行检测&#xff0c;每个账号有三次免费次数 4.检测完&#xff0c;直接查看检测报告即可&#xff0c; 报告中…

[Spring] Spring事务与事务的传播

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

借助 Aspose.Words,在 Word 文档中创建表格

Word 文档中的表格是一种强大的工具&#xff0c;可用于以清晰、结构化的格式组织和呈现数据。表格由行和列组成&#xff0c;行和列相交形成可包含文本、数字、图像或其他元素的单元格。在本文中&#xff0c;我们将学习如何使用 C# 以编程方式在 Word 文档中创建表格。本文通过代…

虚幻5|高级运动实现基础的翻滚Roll 基础篇

一&#xff0c;调整项目设置——输入 1.我设置了翻滚是同时按W&#xff0b;Shift按键&#xff0c;如果你有更好的按键安排&#xff0c;评论区留言 二&#xff0c;打开角色蓝图&#xff0c;打开图表—基础移动&#xff08;你的放图表就行了&#xff0c;我这里是安排了很多排版的…

LDRA Testbed(TBrun)软件单元测试_实例讲解(局部静态变量)

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成&#xff08;自动静态分析并用邮件自动发送分析结果&#xff09; LDRA Testbed软件静态分析_软件质量度量 LDRA Testbed软件…