讀mybatis源碼之八:聲明處理器StatementHandler

在執行器中,都會獲取聲明處理器:

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;
  }
statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);

使用攔截器,聲明處理可以定義插件


使用路由聲明處理器,可以獲取SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler三大處理器。

到底使用哪個處理器,是由ms.getStatementType參數決定,默認是mappedStatement.statementType = StatementType.PREPARED;
在mapper裏面的執行語句 xml標籤中可以配置statementType屬性:

Any one of STATEMENT, PREPARED or CALLABLE. This causes MyBatis to use Statement, PreparedStatement or CallableStatement 
respectively. Default: PREPARED.

BaseStatementHandler
聲明處理器基類,主要是產生 :
protected final TypeHandlerRegistry typeHandlerRegistry; //類型處理註冊
protected final ResultSetHandler resultSetHandler;  //結果處理
protected final ParameterHandler parameterHandler; //參數處理
另外還準備Statement,具體由各個處理器生成instantiateStatement


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章