MyBatis的前身叫iBatis,本是apache的一個開源項目,2010年這個項目由apache software foundation 遷移到了googlecode,並且改名爲MyBatis。MyBatis是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。他消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJOs(Plan Old Java Objects,普通的Java對象)映射成數據庫中的記錄。
Mybatis的功能架構分爲三層:
1) API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
2) 數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操作。
3) 基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。
mybatis流程圖:
sqlMapConfig.xml是mybatis的全局配置文件,名稱可以自定義,是不固定的。配置了數據源事務等mybatis的運行環境。配置映射文件即sql語句的配置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合後 environments配置將廢除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理-->
<transactionManager type="JDBC" />
<!-- 數據庫連接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 加載映射文件 -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
SqlSessionFactory(會話工廠),根據配置文件創建工廠。它的主要功能是創建SqlSession對象,沒有必要每次訪問Mybatis就創建一次SqlSessionFactory,通常的做法是創建一個全局的對象就可以了。
SqlSession(會話),是一個藉口,面向用戶也就是程序員的接口。SqlSession對象的主要功能是完成一次數據庫的訪問和結果的映射,它類似於數據庫的session概念,由於不是線程安全的,所以SqlSession對象的作用域需限制方法內。SqlSession的默認實現類是DefaultSqlSession,它有兩個必須配置的屬性:Configuration和Executor。
Executor對象在創建Configuration對象的時候創建,並且緩存在Configuration對象裏。Executor對象的主要功能是調用StatementHandler訪問數據庫,並將查詢結果存入緩存中(如果配置了緩存的話)。
mappedStatement(底層封裝對象):對操作數據庫存儲封裝,包括sql語句、輸入參數,和輸出類型等。