zoukankan      html  css  js  c++  java
  • MyBatis空where拦截器

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

    如何禁止这种情况,个人觉得三种措施:

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

      1.实现

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

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

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

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

      mybatis读取配置再xml文件中Interceptor,通过反射构造其实例,将所有的Interceptor保存到InterceptorChain中。

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

      参考:

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

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

  • 相关阅读:
    Linux_vi编辑器
    Linux_几个符号命令
    Linux_权限
    Linux_用户/用户组
    Linux_文件及文件夹[创建][复制][移动][删除][重命名]
    Linux_文件查看
    Linux_初识
    码农网站
    学习网站
    软件设计师考试范围
  • 原文地址:https://www.cnblogs.com/cmfwm/p/8024520.html
Copyright © 2011-2022 走看看