mybatis重要組件
-
Configuration 類(lèi)是用于管理MyBatis全局配置文件的關(guān)系類(lèi)
- Environment->DataSource
- Map<String, MappedStatement> mappedStatements
-
SqlSessionFactory
- SqlSessionFactory是Session的管理工廠(chǎng)接口项炼,用于開(kāi)啟SqlSession
-
SqlSession SqlSession中包含了許多面向開(kāi)發(fā)者的調(diào)用方法,如selectOne()剿涮、selectList()浸赫、delete()话浇、update()等方法外恕。
- SqlSessionTemplate
- DefaultSqlSession
MappedStatement MappedStatement是Mapper.xml配置文件的封裝對(duì)象,其中包含SQL語(yǔ)句(SqlSource)午乓、輸入?yún)?shù)(ParameterMap)
StatementHandler StatementHandler接口具體操作數(shù)據(jù)庫(kù)相關(guān)的Handler,提供query()闸准、getBoundSql()等方法益愈。
ResultHandler ResultHandler接口用于操作數(shù)據(jù)庫(kù)返回結(jié)果。
Executor
- CachingExecutor
- BaseExecutor
-
SimpleExecutor
- 簡(jiǎn)單執(zhí)行器夷家,是MyBatis中默認(rèn)使用的執(zhí)行器蒸其,每執(zhí)行一次update或select,就開(kāi)啟一個(gè)Statement對(duì)象库快,用完就直接關(guān)閉Statement對(duì)象(可以是Statement或者是PreparedStatment對(duì)象)
-
BatchExecutor
- 批處理執(zhí)行器摸袁,用于將多個(gè)SQL一次性輸出到數(shù)據(jù)庫(kù)
-
ReuseExcutor
- 可重用執(zhí)行器,這里的重用指的是重復(fù)使用Statement义屏,它會(huì)在內(nèi)部使用一個(gè)Map把創(chuàng)建的Statement都緩存起來(lái)靠汁,每次執(zhí)行SQL命令的時(shí)候,都會(huì)去判斷是否存在基于該SQL的Statement對(duì)象闽铐,如果存在Statement對(duì)象并且對(duì)應(yīng)的connection還沒(méi)有關(guān)閉的情況下就繼續(xù)使用之前的Statement對(duì)象蝶怔,并將其緩存起來(lái)。因?yàn)槊恳粋€(gè)SqlSession都有一個(gè)新的Executor對(duì)象兄墅,所以我們緩存在ReuseExecutor上的Statement作用域是同一個(gè)SqlSession踢星。
org.mybatis.spring.SqlSessionTemplate#selectList
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
//創(chuàng)建Executor和DefaultSqlSession
org.apache.ibatis.session.Configuration#newExecutor
-
StatementHandler
- RoutingStatementHandler
- BaseStatementHandler
- 它本身是一個(gè)抽象類(lèi),用于簡(jiǎn)化StatementHandler 接口實(shí)現(xiàn)的難度察迟,屬于適配器設(shè)計(jì)模式體現(xiàn)斩狱,它主要有三個(gè)實(shí)現(xiàn)類(lèi):
- SimpleStatementHandler
- java.sql.Statement對(duì)象創(chuàng)建處理器,管理 Statement 對(duì)象并向數(shù)據(jù)庫(kù)中推送不需要預(yù)編譯的SQL語(yǔ)句扎瓶。
- PreparedStatementHandler
- java.sql.PrepareStatement對(duì)象的創(chuàng)建處理器所踊,管理Statement對(duì)象并向數(shù)據(jù)中推送需要預(yù)編譯的SQL語(yǔ)句。
- CallableStatementHandler
- java.sql.CallableStatement對(duì)象的創(chuàng)建處理器概荷,管理 Statement 對(duì)象并調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程秕岛。
在創(chuàng)建 SimpleStatementHandler PreparedStatementHandler CallableStatementHandler調(diào)用父類(lèi)構(gòu)造方法 BaseStatementHandler 創(chuàng)建了 ParameterHandler ResultSetHandler
protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql){
// ....
//構(gòu)建parameterHandler
this.parameterHandler = configuration.newParameterHandler(mappedStatement, parameterObject, boundSql);
//構(gòu)建resultSetHandler
this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);
}