MyBatis空where拦截器

最近项目中出现了至少两次由于Mybatis的动态where条件不知足致使实际sql语句的where条件为空,进而查询全表,当数据量比较大的时候,致使OOM的状况.程序员

如何禁止这种状况,我的以为三种措施:sql

  • 1.在逻辑层面加充分的参数有效性检查;
  • 2.在where条件中若是索引条件都不知足,加上1=2这种必然失败的条件;
  • 3.Mybatis拦截器;
  • 前两种措施都是依赖人,从这个层面讲,是不靠谱的,即一个策略不是强制的,就是不靠谱的.相对而言,第三种是不依赖程序员的自觉性,是最靠谱的.乘周六有时间,实现一个简单的Mybatis拦截器来拦截where条件为空的SQL语句.mybatis

    1.实现

    先上代码,这里拦截了SqlCommandType为select,update,delete这三种类型.出现状况目前只是打日志.工具

  • 包括一个简单反射工具的实现:ui

  • /** * 反射工具 * * @author: xiaobaoqiu Date: 15-8-22 Time: 上午11:52 */
  • 2.Mybatis的Interceptor原理

    这篇文章很好的解释了Mybatis的Interceptor机制.spa

    mybatis读取配置再xml文件中Interceptor,经过反射构造其实例,将全部的Interceptor保存到InterceptorChain中。.net

    mybatis的拦截器只能代理指定的四个类:ParameterHandler、ResultSetHandler、StatementHandler以及Executor。3d

    参考:代理

    http://www.tuicool.com/articles/RbyUfu日志

    http://blog.csdn.net/hupanfeng/article/details/9247379

相关文章
相关标签/搜索