MyBatis 是一款优秀的持久层框架,用于简化 JDBC 对象关系映射的复杂性。它的工作原理主要包含以下几个关键步骤和组件:
-
配置文件解析:
- MyBatis 启动时,首先读取全局配置文件
mybatis-config.xml
,该文件中定义了数据源(DataSource)、事务管理器(TransactionManager)、映射器(Mapper)的位置以及其他一些全局配置选项如缓存设置等。
- MyBatis 启动时,首先读取全局配置文件
-
映射文件解析:
- 在全局配置文件中指定的映射文件(Mapper XML 文件)会被逐一加载。映射文件中包含了 SQL 语句和结果映射规则,MyBatis 会解析这些文件并生成相应的
MappedStatement
对象,这些对象代表了 SQL 执行的元信息,包括 SQL 语句本身、参数映射、结果映射等。
- 在全局配置文件中指定的映射文件(Mapper XML 文件)会被逐一加载。映射文件中包含了 SQL 语句和结果映射规则,MyBatis 会解析这些文件并生成相应的
-
SqlSessionFactory 创建:
- 根据解析后的配置信息,MyBatis 会创建一个
SqlSessionFactory
,它是会话工厂,负责创建 SqlSession 对象。
- 根据解析后的配置信息,MyBatis 会创建一个
-
SqlSession 获取:
- 应用程序通过
SqlSessionFactory
获取SqlSession
对象,相当于传统的 JDBC 中的 Connection,但 SqlSession 提供了更高级别的抽象操作,它可以执行预定义的 SQL 语句、提交或回滚事务等。
- 应用程序通过
-
执行 SQL 和结果处理:
- 当应用程序通过 SqlSession 调用一个 Mapper 接口中的方法时,MyBatis 根据方法签名找到对应的 MappedStatement,并使用预处理语句(PreparedStatement)执行 SQL,同时将结果自动映射到 Java 对象上,这得益于之前配置好的结果映射。
-
动态SQL解析:
- MyBatis 支持动态 SQL,可以根据传入的参数条件动态拼接 SQL 语句。在执行阶段,MyBatis 会解析动态元素并正确构建最终要执行的 SQL。
-
缓存机制:
- MyBatis 提供了一级缓存(本地缓存,存在于 SqlSession 级别)和二级缓存(全局缓存,跨 SqlSession 的共享缓存),用于提高查询性能。在特定条件下,MyBatis 可以缓存查询结果,避免频繁重复的数据库交互。