DBC的知識(shí)對(duì)于JAVA開(kāi)發(fā)人員來(lái)講在簡(jiǎn)單不過(guò)的知識(shí)了。PreparedStatement的作用更是胸有成竹。我們最常見(jiàn)用到有倆個(gè)方法:executeQuery方法和executeUpdate方法。這倆個(gè)方法之外還有一個(gè)execute方法。只是這個(gè)方法我們很少用。但是mybatis框架就是卻用這個(gè)方法來(lái)實(shí)現(xiàn)的。不管mybatis用是哪一個(gè)方法來(lái)實(shí)現(xiàn)。有一點(diǎn)可以肯定——那就是必須得到Statement接口實(shí)例。你可以這樣子理解mybatis把如何獲得Statement接口實(shí)例做了一個(gè)完美的封裝。而這一個(gè)封裝就是上一章出現(xiàn)的StatementHandler接口。
mybatis里面實(shí)現(xiàn)StatementHandler接口有四個(gè)類。
RoutingStatementHandler類:筆者把它理解為下面三個(gè)類的代理類。
CallableStatementHandler類:對(duì)應(yīng)處理JDBC里面的CallableStatement類。
PreparedStatementHandler類:對(duì)應(yīng)處理JDBC里面的PreparedStatement類。
SimpleStatementHandler類:對(duì)應(yīng)處理JDBC里面的一般Statement接口實(shí)例(筆者也不知道JDBC是需叫他什么)。
正如上面所講的筆者把RoutingStatementHandler類理解為三個(gè)類的代理類。mybatis并沒(méi)有直接去引用后面三個(gè)類。而是通過(guò)RoutingStatementHandler類來(lái)判斷當(dāng)前到底要調(diào)用哪個(gè)類。再去執(zhí)行相關(guān)的Statement接口實(shí)例。
public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql); statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler); return statementHandler; }
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式