StatementHandler是四大組件最重要的一個(gè)對(duì)象,負(fù)責(zé)操作Statement對(duì)象與數(shù)據(jù)庫(kù)進(jìn)行交流,在工作時(shí)還會(huì)使用ParameterHandler 和 ResultSetHandler 對(duì)參數(shù)進(jìn)行映射,對(duì)結(jié)果進(jìn)行實(shí)體類的綁定
MyBatis 四大組件之StatementHandler
我們?cè)诖罱ㄔ鶭DBC的時(shí)候,會(huì)有這樣一行代碼
Statement stmt=conn.createStatement();//
也可以使用PreparedStatement來(lái)做
這行代碼創(chuàng)建的 Statement 對(duì)象或者是 PreparedStatement 對(duì)象就是由StatementHandler進(jìn)行管理的。

prepare: 用于創(chuàng)建一個(gè)具體的 Statement 對(duì)象的實(shí)現(xiàn)類或者是 Statement 對(duì)象
parametersize: 用于初始化 Statement 對(duì)象以及對(duì)sql的占位符進(jìn)行賦值
update: 用于通知 Statement 對(duì)象將 insert、update、delete 操作推送到數(shù)據(jù)庫(kù)
query: 用于通知 Statement 對(duì)象將 select 操作推送數(shù)據(jù)庫(kù)并返回對(duì)應(yīng)的查詢結(jié)果
StatementHandler的繼承結(jié)構(gòu)

RoutingStatementHandler: RoutingStatementHandler 并沒(méi)有對(duì) Statement 對(duì)象進(jìn)行使用,只是根據(jù)StatementType 來(lái)創(chuàng)建一個(gè)代理,代理的就是對(duì)應(yīng)Handler的三種實(shí)現(xiàn)類。在MyBatis工作時(shí),使用的StatementHandler 接口對(duì)象實(shí)際上就是 RoutingStatementHandler 對(duì)象。
BaseStatementHandler: 是 StatementHandler 接口的另一個(gè)實(shí)現(xiàn)類.本身是一個(gè)抽象類.用于簡(jiǎn)化StatementHandler 接口實(shí)現(xiàn)的難度,屬于適配器設(shè)計(jì)模式體現(xiàn),它主要有三個(gè)實(shí)現(xiàn)類
SimpleStatementHandler:管理Statement對(duì)象并且向數(shù)據(jù)庫(kù)推送不需要預(yù)編譯SQL語(yǔ)句
PreparedStatementHandler:管理Statement對(duì)象并且向數(shù)據(jù)庫(kù)推送需要預(yù)編譯SQL語(yǔ)句
CallableStatementHandler:管理Statement對(duì)象并且調(diào)用數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程
StatementHandler 對(duì)象創(chuàng)建以及源碼分析
Configuration 中的 newStatementHandler 是由執(zhí)行器中的查詢、更新(插入、更新、刪除)方法來(lái)提供的,StatementHandler 其實(shí)就是由 Executor 負(fù)責(zé)管理和創(chuàng)建的
query方法:

Update方法:
