一、
Configuration Executor MappedStatement
MyBatis 3 的核心组件中,Configuration
、Executor
和 MappedStatement
是非常关键且相互关联的部分,它们共同构成了 MyBatis 框架的基础架构,用于管理 SQL 映射和执行数据库操作。
Configuration
Configuration
类是 MyBatis 所有配置信息的封装。它包含了 MyBatis 运行时所需的所有配置,如数据库连接信息(DataSource)、事务管理器(TransactionManager)、类型处理器(TypeHandlers)、映射器(Mapper)的注册信息等。
- 数据源(DataSource):用于获取数据库连接。
- 事务管理器(TransactionManager):管理数据库事务。
- 映射器(Mappers):注册了所有的 Mapper 接口和对应的 XML 映射文件。
- 类型别名(Type Aliases):用于简化类型名称的引用。
- 插件(Plugins):允许用户自定义拦截器,以修改 MyBatis 的行为。
Executor
Executor
是 MyBatis 用来执行 SQL 语句的接口。它是 MyBatis 框架中所有数据库操作的核心。Executor
接口定义了多个方法来执行不同类型的 SQL 语句,如更新(update)、查询(query)、获取映射器(getMapper)等。
MyBatis 提供了几种不同类型的 Executor
实现,以适应不同的应用场景,如:
- SimpleExecutor:简单执行器,它每次执行更新或查询时,都会开启一个新的 SqlSession。
- ReuseExecutor:重用执行器,它会对 SqlSession 内的所有操作使用同一个 Statement。
- BatchExecutor:批处理执行器,它用于将多个更新操作组合成一个批次执行,以减少与数据库的交互次数。
MappedStatement
MappedStatement
是 MyBatis 中最重要的一个类,它封装了 SQL 语句的所有信息,包括 SQL 语句本身、输入参数的类型、返回结果的类型、是否使用缓存等。在 MyBatis 中,每一个 <select>
、<insert>
、<update>
、<delete>
标签都会被解析成一个 MappedStatement
对象,并存储在 Configuration
对象中。
当执行 SQL 语句时,MyBatis 会根据 Mapper 接口的方法名和参数类型等信息,在 Configuration
中查找对应的 MappedStatement
对象,然后利用 Executor
来执行这个 MappedStatement
封装的 SQL 语句。
总结
Configuration
、Executor
和 MappedStatement
是 MyBatis 框架中的核心组件,它们共同协作以完成 SQL 语句的映射和执行。Configuration
提供了框架的全局配置信息,Executor
负责执行 SQL 语句,而 MappedStatement
则封装了具体的 SQL 语句信息和执行参数。这三个组件的紧密配合,使得 MyBatis 能够以灵活且高效的方式处理数据库操作。
二、
StatementHandler TypeHandler ParameterHandler ResultSetHandler
在 MyBatis 3 中,StatementHandler
、TypeHandler
、ParameterHandler
和 ResultSetHandler
是四个关键的处理器(Handler)接口,它们在执行 SQL 语句和处理结果集的过程中扮演着重要的角色。这些处理器共同协作,确保 MyBatis 能够高效地将 Java 对象与数据库进行交互。
StatementHandler
StatementHandler
是 MyBatis 中用于处理 SQL 语句的执行的接口。它封装了 JDBC 的 Statement
或 PreparedStatement
,并提供了执行 SQL 语句的方法。StatementHandler
负责配置 SQL 语句的参数、执行 SQL 语句,并处理执行过程中可能出现的异常。
TypeHandler
TypeHandler
是 MyBatis 中用于处理 Java 类型和 JDBC 类型之间转换的接口。它定义了如何将 Java 类型转换为 JDBC 类型(用于设置 SQL 语句的参数),以及如何将 JDBC 类型转换为 Java 类型(用于从结果集中获取数据)。MyBatis 提供了许多内置的 TypeHandler
实现,用于处理常见的 Java 类型和 JDBC 类型的转换,同时也支持用户自定义 TypeHandler
以满足特殊需求。
ParameterHandler
ParameterHandler
是 MyBatis 中用于处理 SQL 语句参数的接口。它负责将用户传递的参数值设置到 SQL 语句的占位符中。ParameterHandler
通过与 TypeHandler
的协作,将 Java 类型的参数转换为 JDBC 类型的参数,并设置到 PreparedStatement
的相应位置。
ResultSetHandler
ResultSetHandler
是 MyBatis 中用于处理 SQL 查询结果集的接口。它负责将 JDBC 的 ResultSet
转换为 Java 对象或集合。ResultSetHandler
通过与 TypeHandler
的协作,从 ResultSet
中读取数据,并将其转换为 Java 类型的值。然后,它根据 Mapper 接口方法的返回类型,将这些值组装成相应的 Java 对象或集合。
总结
这四个处理器在 MyBatis 的执行流程中各司其职,共同完成了 SQL 语句的执行和结果集的处理。StatementHandler
负责 SQL 语句的执行,ParameterHandler
负责处理 SQL 语句的参数,ResultSetHandler
负责处理 SQL 查询的结果集,而 TypeHandler
则在它们之间起到了桥梁的作用,负责 Java 类型和 JDBC 类型之间的转换。这四个组件的紧密配合,使得 MyBatis 能够以高效且灵活的方式处理数据库操作。
--end--
标签:语句,Java,MyBatis,MappedStatement,组件,类型,SQL,Mybatis,第四章 From: https://blog.csdn.net/FlyingJiang/article/details/142069368