分表查询的思路很简单,就是在sql的运行过程中的某一阶段,拦截下sql,将它“自动”路由到分表中的任意一个

一、Mybatis Interceptor接口使用

  按照思路所说,自然要想办法把运行到某一阶段的sql拦截下来并做更改,那么就需要Interceptor。

  Interceptor可以拦截的方法,官网描述如下:

  MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

    •   Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    •   ParameterHandler (getParameterObject, setParameters)
    •   ResultSetHandler (handleResultSets, handleOutputParameters)
    •   StatementHandler (prepare, parameterize, batch, update, query)

  这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。

  sql语句是被封装在BoundSql里的,而BoundSql由StatementHandler获取,所以我们拦截StatementHandler的prepare方法(StatementHandler和BoundSql部分源码如下)。

public interface StatementHandler {

  BoundSql getBoundSql();

  ParameterHandler getParameterHandler();

}
public class BoundSql {

  private String sql;

  public BoundSql(Configuration configuration, String sql, List<ParameterMapping> parameterMappings, Object parameterObject) {
    this.sql = sql;
    ......
  }

  public String getSql() {
    return sql;
  }

}
View Code

相关文章:

  • 2021-05-26
  • 2021-12-11
  • 2021-05-16
  • 2021-11-14
  • 2021-12-24
  • 2021-10-17
  • 2021-07-09
  • 2022-12-23
猜你喜欢
  • 2021-05-13
  • 2022-12-23
  • 2021-08-28
  • 2021-11-02
  • 2021-04-29
  • 2021-07-16
相关资源
相似解决方案