MyBatis是什麼?
MyBatis是一款一流的支持自定義SQL、存儲過程和高級映射的持久化框架。MyBatis幾乎消除了全部的JDBC代碼,也基本不須要手工去 設置參數和獲取檢索結果。MyBatis可以使用簡單的XML格式或者註解進行來配置,可以映射基本數據元素、Map接口和POJOs(普通java對 象)到數據庫中的記錄。html
簡介
每一個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個 SqlSessionFactory實例能夠經過SqlSessionFactoryBuilder得到。 SqlSessionFactoryBuilder能夠從一個xml配置文件或者一個預約義的配置類的實例得到。
用xml文件構建SqlSessionFactory實例是很是簡單的事情。推薦在這個配置中使用類路徑資源 (classpath resource),但你可使用任何Reader實例,包括用文件路徑或file://開頭的url建立的實例。MyBatis有一個實用類 ----Resources,它有不少方法,能夠方便地從類路徑及其它位置加載資源。
MyBatis工做流程
(1)加載配置並初始化
觸發條件:加載配置文件
配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)接收調用請求
觸發條件:調用Mybatis提供的API
傳入參數:爲SQL的ID和傳入參數對象
處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操做請求 觸發條件:API接口層傳遞請求過來
傳入參數:爲SQL的ID和傳入參數對象
處理過程:
(A)根據SQL的ID查找對應的MappedStatement對象。
(B)根據傳入參數對象解析MappedStatement對象,獲得最終要執行的SQL和執行傳入參數。
(C)獲取數據庫鏈接,根據獲得的最終SQL語句和執行傳入參數到數據庫執行,並獲得執行結果。
(D)根據MappedStatement對象中的結果映射配置對獲得的執行結果進行轉換處理,並獲得最終的處理結果。
(E)釋放鏈接資源。
(4)返回處理結果將最終的處理結果返回。
功能架構
咱們把Mybatis的功能架構分爲三層:
一、API接口層:java
提供給外部使用的接口API,開發人員經過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
二、數據處理層:sql
負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操做。
三、基礎支撐層:數據庫
負責最基礎的功能支撐,包括鏈接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來做爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。
從XML中構建SqlSessionFactory
- String resource = "com/accp/mybatis/data/Configuration.xml";
- Reader reader = Resources.getResourceAsReader(resource);
- sqlMapper = new SqlSessionFactoryBuilder().build(reader);
MyBatis主配置文件
MyBatis配置文件中大標籤configuration下子標籤包括:緩存
configuration服務器
|--- propertiessession
|--- settingsmybatis
|--- typeAliases架構
|--- typeHandlersapp
|--- objectFactory
|--- plugins
|--- environments
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers
XML <configuration>配置文件包含對MyBatis系統的核心設置,包含獲取數據庫鏈接實例的數據源和決定事務範圍和控制的事務管理器。
從SqlSessionFactory中獲取SqlSession
經過如下代碼得到SqlSession實例。
- SqlSession session = sqlMapper.openSession();