美文网首页
7. StatementHandler

7. StatementHandler

作者: 元隐 | 来源:发表于2020-01-15 18:40 被阅读0次

RoutingStatementHandler

RoutingStatementHandler只是一个代理类, 实际是使用的是

case STATEMENT:
        delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
        break;
      case PREPARED:
        delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
        break;
      case CALLABLE:
        delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler, boundSql);
break;

随着技术推进, 由于存储过程不推荐使用, CALLABLE 现在用的应该非常少了.

PREPARED和STATEMENT 就是常用的Statement和PreparedStatement了.
理解了PreparedStatement , Statement就不难理解了.

在Sql

//PreparedStatement
  @Override
  public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
    PreparedStatement ps = (PreparedStatement) statement;
    ps.execute();
    return resultSetHandler.handleResultSets(ps);
  }

//Statement
@Override
  public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
    String sql = boundSql.getSql();
    statement.execute(sql);
    return resultSetHandler.handleResultSets(statement);
  }

可以看到, 由Configuration进行解析, 真正到StatementHandler 这边, 已经非常简单了.

   Configuration configuration = ms.getConfiguration();
      StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);
      stmt = prepareStatement(handler, ms.getStatementLog());

设置PreparedStatement的paramter(普通 Statement)连这一步都省了

@Override
  public void parameterize(Statement statement) throws SQLException {
    parameterHandler.setParameters((PreparedStatement) statement);
  }

然后execute就好了

@Override
  public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
    PreparedStatement ps = (PreparedStatement) statement;
    ps.execute();
    return resultSetHandler.handleResultSets(ps);
  }

resultSetHandler参见resultSetHandler章节

相关文章

网友评论

      本文标题:7. StatementHandler

      本文链接:https://www.haomeiwen.com/subject/oqftzctx.html