MyBatis本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,而且更名爲MyBatis 。2013年11月遷移到Github。java
MyBatis是支持普通SQL查詢,存儲過程和高級映射的持久化框架,底層是對JDBC的封裝,是一個半自動的ORM框架。sql
MyBatis 使用簡單的 XML 或註解用於配置和原始映射,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 對象)映射成數據庫中的記錄。數據庫
第一層:API接口層apache
提供給外部使用的接口API,開發人員經過這些本地API來操做數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。編程
MyBatis和數據庫的交互有兩種方式:緩存
第二層:數據處理層session
負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操做。mybatis
第三層:基礎支撐層架構
負責最基礎的功能支撐,包括鏈接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將它們抽取出來做爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。app
. └── org └── apache └── ibatis ├── annotations ├── binding ├── builder ├── cache ├── cursor ├── datasource ├── exceptions ├── executor ├── io ├── jdbc ├── logging ├── mapping ├── parsing ├── plugin ├── reflection ├── scripting ├── session ├── transaction └── type
1. 日誌
org.apache.ibatis.logging
org.apache.ibatis.logging.commons
org.apache.ibatis.logging.jdbc
org.apache.ibatis.logging.jdk14
org.apache.ibatis.logging.log4j
org.apache.ibatis.logging.log4j2
org.apache.ibatis.logging.nologging
org.apache.ibatis.logging.slf4j
org.apache.ibatis.logging.stdout
2. 異常
org.apache.ibatis.exceptions
3. 緩存
org.apache.ibatis.cache
org.apache.ibatis.cache.decorators
org.apache.ibatis.cache.impl
4. 解析
org.apache.ibatis.parsing
xml解析,${} 格式的字符串解析
5.類型處理器
org.apache.ibatis.type
實現java和jdbc中的類型之間轉換
6. IO
org.apache.ibatis.io
經過類加載器在jar包中尋找一個package下知足條件(好比某個接口的子類)的全部類
7. 反射
org.apache.ibatis.reflection
org.apache.ibatis.reflection.factory
org.apache.ibatis.reflection.invoker
org.apache.ibatis.reflection.property
org.apache.ibatis.reflection.wrapper
能夠參考MetaObjectTest來跟蹤調試,基本上用到了reflection包下全部的類
8. 數據源
org.apache.ibatis.datasource
org.apache.ibatis.datasource.jndi
org.apache.ibatis.datasource.pooled
org.apache.ibatis.datasource.unpooled
9. 事務
org.apache.ibatis.transaction
org.apache.ibatis.transaction.jdbc
org.apache.ibatis.transaction.managed
10. 會話
org.apache.ibatis.session
org.apache.ibatis.session.defaults
11. jdbc單元測試工具
org.apache.ibatis.jdbc
12. 構建
org.apache.ibatis.builder
org.apache.ibatis.builder.annotation
org.apache.ibatis.builder.xml
13. 映射
org.apache.ibatis.mapping
14. 腳本
org.apache.ibatis.scripting
org.apache.ibatis.scripting.defaults
org.apache.ibatis.scripting.xmltags
15. 註解
org.apache.ibatis.annotations
16. 綁定
org.apache.ibatis.binding
17. 執行器
org.apache.ibatis.executor
org.apache.ibatis.executor.keygen
org.apache.ibatis.executor.loader
org.apache.ibatis.executor.loader.cglib
org.apache.ibatis.executor.loader.javassist
org.apache.ibatis.executor.parameter
org.apache.ibatis.executor.result
org.apache.ibatis.executor.resultset
org.apache.ibatis.executor.statement
18. 插件
org.apache.ibatis.plugin
1. mybatis配置
SqlMapConfig.xml,此文件做爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。
mapper.xml文件即sql映射文件,文件中配置了操做數據庫的sql語句。此文件須要在SqlMapConfig.xml中加載。
SqlMapConfig.xml是mybatis的核心文件。mybatis將dao層與sql語句分離開來,雖然寫的時候分離開來了,可是執行的時候仍是要依靠sql語句,因此咱們的sql語句寫在Mapper.xml中。咱們在加載核心的時候,會加載他下面的Mapper.xml,因此sql語句便會加載進去了。咱們只須要在SqlMapConfig.xml中引入Mapper.xml就能夠了,因此最後只須要加載SqlMapConfig.xml這一個核心配置文件。
2. 經過mybatis環境等配置信息構造SqlSessionFactory,即會話工廠。工廠能幫咱們去加載核心配置文件。加載了核心配置文件後就建立session,經過session能夠對數據庫進行操做。
3. 由會話工廠建立sqlSession即會話,操做數據庫須要經過sqlSession進行。
4. mybatis底層自定義了Executor執行器接口操做數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。Executor是執行者,咱們不須要管,由於mybatis已經爲咱們封裝好了。mybatis直接執行sql語句。
5. Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id便是Mapped statement的id。
6. Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor經過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。
7. Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor經過Mapped Statement在執行sql後將輸出結果映射至java對象中,輸出結果映射過程至關於jdbc編程中對結果的解析處理過程。
8. Mapped Statement是輸入與輸出中間過程當中產生的一些對象,經過這些對象去訪問數據庫。
總結:工廠能幫咱們去加載核心配置文件,同時建立會話,會話裏面有執行者,執行sql語句,在執行sql語句的過程當中產生對象,經過Mapped Statement封裝成對象。執行sql語句就要須要輸入參數和輸出參數。