Mybatis的SqlSessionFactory構造過程
阿新 • • 發佈:2018-12-17
建立SqlSession的關鍵是先建立SqlSessionFactory,建立SqlSessionFactory需要提供配置檔案和相關的引數,然後可以使用SqlSessionFactoryBuilder去建立SqlSessionFactory,提供Configuration物件作為SqlSessionFactory建構函式入參。步驟如下:
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
- 通過XMLConfigBuilder去解析配置的XML檔案,讀出配置引數,並將讀出的資料存入Configuration類中,Mybatis幾乎所有的配置都是存在這裡。
- 使用Configuration物件去建立SqlSessionFactory,這只是一個介面,有預設的實現類DefaultSqlSessionFactory
Mybatis是一個複雜的系統,其初始化過程非常複雜,因此把所有初始化引數包裝成一個物件,方便管理引數,同時具有內聚性
對映器的內部組成 一個對映器是由3個部分組成:
- MappedStatement,它儲存著對映器的一個節點(select|insert|delete|update)。包括許多配置的SQL,SQL的id,快取資訊、resultMap、parameterType等配置資訊
- SqlSource,是提供BoundSql物件的地方,是MappedStatement的一個屬性,
- BoundSql,建立SQL和引數的地方。有三個常用屬性:SQL,parameterObject、parameterMappings
parameterObject為引數本身,有三種引數:基本資料型別,POJO,Map或者@param註解的引數
- 基本資料型別,Mybatis會把引數變為Integer物件傳遞,
- POJO和Map,那麼parameterObject就是傳入的POJO和Map
- 多個引數,Mybatis會把parameterObject變為一個
Map<String,Object>
物件,其中引數被當做Map的value,而key根據是否有@Param註解來分為兩種,如果沒有@Param註解,那麼key為“1”、“2”…,如果有@Param註解,則key為註解中的字串
parameterMappings:是一個list,儲存著parameterMapping,這個物件會描述我們的引數,包括屬性、名稱、表示式、jdbcTypeName、jdbcType、javaType、typeHandler等,一般不去修改它,通過它可以實現Sql和引數的結合,以便PreparedStatement能夠通過它找到parameterObject物件的屬性並設定引數
sql屬性就是我們書寫在對映器裡的一條sql,大多數情況下無需修改它。
SqlSession執行過程 SqlSession是一個介面,通過構造SqlSessionFactory就可以輕易拿到SqlSession,SqlSession介面有許多常用的CRUD方法,呼叫這些方法可以執行相應的CRUD SQL語句,