MyBatis 的解析和运仔原理

构建 SqlSessionFactory 过程

SqlSessionFactory MyBatis 的核心类之一 其最重要的功能就是提供 MyBatis 的核心接口 SqlSession ,所以要先 SqlSessionFactory ,为此要提供配置文件和相关的参 数。 MyBatis 是一个复杂的系统,它采用了 Builder 模式去创建 SqlSessionFactory 在实际 中可以通过 SqlSessionF actoryBuilder 去构建 其构建分为两步。

1 :通过 org.apache.ibatis builder nl .XMLConfigBuilder 解析配置的 XML 文件 读出所配置的参数,并将读取的内容存入 org.apache.ibatis.session.Configuration 类对象中。 onfiguration 采用的是单例模式,几乎所有 MyBatis 配置内容都会存放在这个单例对 象中,以便后续将这些内容读出。

2步:使用 Confinguration 对象去 SqlSessionFactory MyBatis SqlSessionFactory 是一 个接口,而不是 个实现类,为此 MyBatis 提供了 个默认的实现类 org.apache ibatis .s ession.defaults.DefaultSqlSessionFactory 。在大部分情况下都没有必要自己 去创建新 SqlSessionFactory 实现类。 这种 建的方式就是 Builder 模式,对于复杂的对象而 ,使用构造参数很难实现 这时使用一个类(比如 Configuration )作为统领, 步步地构建所需的内 然后通过它 去创建最终的对象(比如 SqlSessionFaco町),这样每 步都会很清晰,这种方式值得读者 学习,并且在工作中使用

 

构建 Configuration

SqlSessionFactory 构建中, Configuration 是最重要的,它的作用是 ·读入配置文件,包括基础配置的 XML 和映射器 XML (或注解〉。 初始化 些基础配置,比如 MyBatis 的别名 些重要的类对象(比如插件、映 射器、 Object 工厂、 typeHandlers 对象等)。 提供单例,为后续创建 SessionFactorγ 服务,提供配置的参数。 执行一些重要对象的初始化方法。

MyBatis 的解析和运仔原理

 构建映射器的内部组成

般而言,在 MyBatis SQL 它相关的配置信息是由 个部分组成的,它们分 别是 MappedStatement SqlSource BoundSql

MyBatis 的解析和运仔原理

 实际上 SqlSession 的执 程是 Executor State ntHandl Parame erHandler ResultSetHandler 来完 数据库操作和结果返回 的,

 MyBatis 的解析和运仔原理

 MyBatis 的解析和运仔原理

 MyBatis 的解析和运仔原理

 StatementHandler一一数据库会话器

查询 SQL 的执行过程 Executor 先调用 StatementHandler prepare()方法预编译 SQL ,同时设置 些基本运行的参数。然后用 parameterize() 方法启用 ParameterHandler 置参数,完成预编译,执行查询, update()也是这样的 。如果是查询 MyBatis 会使用 ResultSetHandler 封装结果返回给调用者。

ParameterHandler-一参数处理器

是从 parameterObj ect 对象中取到参数,然后使用 typeHandler 转换参数,如果有设 置,那么它会根据签名注册的 typeHandler 对参数进行处理。而 typeHandler 是在 MyBatis 初始化时,注册在 onfiguration 里面的,需要时就可以直接拿来用了, MyBatis 是通过 这样完成参数设置的。

 

ResultSetHandler一一结果处理器

MyBatis 的解析和运仔原理

 

MyBatis 的解析和运仔原理