目录
1 MyBatis 介绍
2 MyBatis 的重要组件
3 MyBatis 执行流程
4 参考文档
1 MyBatis 介绍
MyBatis 是一个半自动化的 ORM (Object-Relational Mapping,对象关系映射)持久层框架,它允许开发者通过 XML 或注解将对象与数据库中的记录建立映射关系,同时提供了灵活的 SQL 编写和参数设置功能。以下是 MyBatis 的一些详细介绍:
- JDBC 代码简化:MyBatis 能根据不同的条件动态生成 SQL 语句,使用它可以避免编写大量的 JDBC 代码,如手动设置参数和检索结果集。MyBatis 通过配置和映射机制自动处理这些底层细节,从而简化了数据库操作的代码量
- 参数传递:可以通过参数传递的方式,避免 SQL 注入攻击,提高了数据库操作的安全性
- 存储过程:MyBatis 不仅支持基本的 SQL 查询,还支持存储过程的调用。这使得在数据库层面封装复杂逻辑成为可能,有助于提高应用程序的性能
- 高级映射:MyBatis 提供了通过 XML配置文件或注解建立高级映射的功能,可以将数据库中的数据映射到 Java 对象,包括原语类型、接口和 POJO(Plain Old Java Object,普通老式 Java 对象),当然,也可以将原语类型、接口和 POJO 映射成数据库中的记录
- 缓存机制:MyBatis 提供了一级和二级缓存机制,减少了对数据库的访问次数,提高了系统的性能
- 插件机制:支持插件扩展,可以通过自定义插件来实现一些特定的功能,如分页、审计等
持久层和 ORM:
- 持久 (Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
- 持久层是指在软件系统中负责将数据持久化到数据库或其他存储介质中的那部分架构。它的主要任务是处理与数据库交互的逻辑,包括数据的读取、写入、更新和删除等操作
- ORM 是一种将对象模型和关系型数据库进行映射的技术。通过 ORM,开发者可以使用面向对象的方式来操作数据库,无需直接编写复杂的 SQL 语句,而 MyBatis 仍需要编写 SQL 语句,因此,它是一个半自动化的 ORM 框架
2 MyBatis 的重要组件
- Mybatis 的配置文件:SqlMapConfig.xml(名称可以任意) 是 Mybatis 的全局配置文件,主要配置数据源、事务、加载映射文件等。Mapper.xml,即 SQL 映射文件,主要是配置 Statement(数据库操作的具体语句) 的相关信息,如 SQL 语句
- SqlSessionFactoryBuilder:会根据 XML 配置或 Java 配置来生成 SqlSessionFactory 对象,采用分布构建的 Builder (建造者)模式。(简单来说就是分步构建一个大的对象,例如建造一个大房子,采用购买砖头、砌砖、粉刷墙面的步骤建造,其中的大房子就是大对象,一系列的建造步骤就是分步构建)
- SqlSessionFactory:用于生成 SqlSession,可以通过 SqlSessionFactory.openSession() 方法创建 SqlSession 对象。SqlSessionFactory 使用工厂模式,是线程安全的,一旦被创建,可以在整个应用中重复使用来获取 SqlSession 实例,从而与数据库进行交互(工厂模式简单来说就是我们获取对象是通过一个类,由这个类去创建我们所需的实例并返回,而不是我们自己通过 new 去创建)
- SqlSession:是与数据库交互的主要入口,相当于 JDBC 中的 Connection 对象,通过 SqlSessionFactory 获取 SqlSession 实例后,就可以执行SQL命令、获取映射器和管理事务等操作。SqlSession 的实例不是线程安全的,因此是不能被共享的。SqlSession 每次使用完后需要正确关闭,这个关闭操作是必须的
- Executor:MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 执行的(Mapper:由 XML 文件和 Java 接口组成,根据 XML 中配置的映射信息执行对应的 SQL 语句并返回执行结果)
- Mapper 接口:数据操作接口,也就是通常说的 DAO 接口,要和 Mapper 配置文件中的方法一一对应,也就是必须和 Mapper.xml 中的增删改查标签 id 一致
- Mapper 配置:用于组织具体的查询业务和映射数据库的字段关系,可以使用 XML 格式(Mapper.xml)或 Java 注解格式来实现
- MappedStatement:封装了 Statement 的相关信息,包括 SQL 语句、输入参数和输出结果等。在 MyBatis 中,每个 Mapper.xml 文件中的 select、insert、update、delete 标签都会生成一个 MappedStatement 对象
3 MyBatis 执行流程
MyBatis的执行流程可以概括为以下几个关键步骤:
- 加载配置:MyBatis 启动时,会根据配置文件和 Java 代码的注解中加载 SQL 的配置信息。这些信息包括传入参数映射配置、执行的SQL语句、结果映射配置等,然后形成一个或多个 MappedStatement 对象,并存储在 Configuration 对象中
- 创建 SqlSessionFactory:通过读取的配置文件信息,MyBatis 会创建一个 SqlSessionFactory 实例。这个工厂类是线程安全的,一旦创建,可以在应用中重复使用来获取 SqlSession 实例
- 创建 SqlSession:SqlSession 是 MyBatis 中执行 SQL 命令的主要接口。通过 SqlSessionFactory 获取 SqlSession 实例后,可以通过它来执行 SQL 命令、获取映射器和管理事务等操作
- 解析映射器:当调用 Mapper 接口的方法时,MyBatis 会根据方法名找到对应的 MappedStatement 对象
- 执行 SQL:MyBatis 使用 Executor 接口的实现类来执行 SQL 语句。BaseExecutor 定义了基本的执行流程,而 CachingExecutor 在此基础上增加了缓存功能
- 结果映射:查询结果会被映射到 Java 对象中,这个过程依赖于 MappedStatement 中的结果映射配置
- 返回结果:最后,执行结果会返回给调用者
4 参考文档
Mybatis3详解(一)----Mybatis的介绍 - 唐浩荣 - 博客园 (cnblogs.com)
MyBatis的执行原理详细介绍 - aspirant - 博客园 (cnblogs.com)