16. Interceptor功能

BeetlSql可以在执行sql前后执行一系列的Intercetor,从而有机会执行各种扩展和监控,这比已知的通过数据库连接池做Interceptor更加容易。如下Interceptor都是有可能的

  • 监控sql执行较长时间语句,打印并收集。TimeStatInterceptor 类完成
  • 对每一条sql语句执行后输出其sql和参数,也可以根据条件只输出特定sql集合的sql。便于用户调试。DebugInterceptor完成
  • 对sql预计解析,汇总sql执行情况(未完成,需要集成第三方sql分析工具)
    你也可以自行扩展Interceptor类,来完成特定需求。 如下,在执行数据库操作前会执行before,通过ctx可以获取执行的上下文参数,数据库成功执行后,会执行after方法
  1. public interface Interceptor {
  2. public void before(InterceptorContext ctx);
  3. public void after(InterceptorContext ctx);
  4. }

InterceptorContext 如下,包含了sqlId,实际得sql,和实际得参数, 也包括执行结果result。对于查询,执行结果是查询返回的结果集条数,对于更新,返回的是成功条数,如果是批量更新,则是一个数组。可以参考源码DebugInterceptor

  1. public class InterceptorContext {
  2. private String sqlId;
  3. private String sql;
  4. private List<SQLParameter> paras;
  5. private boolean isUpdate = false ;
  6. private Object result ;
  7. private Map<String,Object> env = null;
  8. }