获取MappedStatement

执行SQL,我们当让想要首先获得被mybatis处理过的SQL,这就是MappedStatement,对应于JDBC中的Statement

我们一起回顾一下JDBC中的步骤:

  1. 获取驱动
  2. 获取Connection
  3. 获取Statement
  4. 执行SQL,获取ResultSet
  5. 处理ResultSet
  1. // 获取拦截的参数
  2. Object[] args = invocation.getArgs();
  3. MappedStatement mappedStatement = (MappedStatement) args[0];

获取Parameter

获取mapper传递的参数:

  1. Object parameter = null;
  2. if (args.length > 1) {
  3. parameter = args[1];
  4. }

获取BoundSql

  1. BoundSql boundSql = mappedStatement.getBoundSql(parameter);

获取原始SQL

  1. String originalSql = boundSql.getSql();

Mybaits中处理BoundSql的方式

  1. PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql);
  2. mpBs.sql(parserSingle(mpBs.sql(), null));