DBC的知識對于JAVA開發(fā)人員來講在簡單不過的知識了。PreparedStatement的作用更是胸有成竹。我們最常見用到有倆個(gè)方法:executeQuery方法和executeUpdate方法。這倆個(gè)方法之外還有一個(gè)execute方法。只是這個(gè)方法我們很少用。但是mybatis框架就是卻用這個(gè)方法來實(shí)現(xiàn)的。不管mybatis用是哪一個(gè)方法來實(shí)現(xiàn)。有一點(diǎn)可以肯定——那就是必須得到Statement接口實(shí)例。你可以這樣子理解mybatis把如何獲得Statement接口實(shí)例做了一個(gè)完美的封裝。而這一個(gè)封裝就是上一章出現(xiàn)的StatementHandler接口。
mybatis里面實(shí)現(xiàn)StatementHandler接口有四個(gè)類。
RoutingStatementHandler類:筆者把它理解為下面三個(gè)類的代理類。
CallableStatementHandler類:對應(yīng)處理JDBC里面的CallableStatement類。
PreparedStatementHandler類:對應(yīng)處理JDBC里面的PreparedStatement類。
SimpleStatementHandler類:對應(yīng)處理JDBC里面的一般Statement接口實(shí)例(筆者也不知道JDBC是需叫他什么)。
正如上面所講的筆者把RoutingStatementHandler類理解為三個(gè)類的代理類。mybatis并沒有直接去引用后面三個(gè)類。而是通過RoutingStatementHandler類來判斷當(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; }