概述

My Batis 是 Apache 的一个 Java 开源项目,原名为 iBatis ( 即 Internet 与 abatis 的结合),后 因项目托管平台的迁移 (由 Goolge Code 转移至 GitHub)更名为 MyBatis。 MyBatis 是一款支持 动态 SQL 语句的持久层框架,支持目的是让开发人员将精力集中在 SQL 语句上。
My Batis 可以将 SQL 语句配置在 XML 文件中,这避免了 JDBC 在 Java 类中添加 SQL 语句 的硬编码问题; 通过 MyBatis 提供的输入参数映射方式,将参数自由灵活地配置在 SQL 语句配 置文件中,解决了 JDBC 中参数在 Java 类中手工配置的问题:通过 MyBatis 的输出映射机制, 将结果集的检索自动映射成相应的 Java 对象,避免了 JDBC 中对结果集的手工检索:同时 My Batis 还可以创建自己的数据库连接池,使用 XML 配置文件的形式,对数据库连接数据进行 管理, 避免了 JDBC 的数据库连接参数的硬编码问题。

MyBatis 整体架构

My Batis 整体的构造由数据源配置文件、 SQL 映射配置文件、 会话工厂、 会话、执行器以 及底层封装对象组成。

数据源配置文件:

  • properties(属性)
  • settings(全局配置参数)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境集合属性对象)
  • environment(环境子属性对象)
  • transactionManager(事务管理)
  • dataSource(数据源)
  • mappers(映射器)
<configuration>
    <properties resource="db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>

MyBatis运行流程

My Batis 的整个运行流程,也是紧紧围绕着数据库连接池配置文件 Sq!MapConfig.xml,以 及 SQL 映射配置文件 Mapper.xml 而开展的。
首先 Sq!SessionFactory会话工厂会通过 Resources 资源信息加载对象获取 Sq!MapConfig.xml 配置文件信息,然后产生可以与数据库进行交互的会话实例类 Sq!Session。会话实例类 SqI Session 可以根据 Mapper 配置文件中的 SQL 配置,去执行相应的增删改查操作。 而在 SqI Session 类内 部,是通过执行器 Executor (分为基本执行器和缓存执行器)对数据库进行操作的。执行器 Executor 与数据库交互,依靠的是底层封装对象 Mappered Statement,它封装了从 Mapper 文件 中读取的信息(包括 SQL 语句、输入参数、输出结果类型)。通过执行器 Executor 与底层封装 对象 Mappered Statement 的结合, MyBatis 就实现了与数据库进行交互的功能。

Mybatis运行流程