码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis空where拦截器

时间:2017-12-11 20:07:22      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:技术   包括   比较   param   alt   csdn   upd   gpo   技术分享   

最近项目中出现了至少两次因为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

MyBatis空where拦截器

标签:技术   包括   比较   param   alt   csdn   upd   gpo   技术分享   

原文地址:http://www.cnblogs.com/cmfwm/p/8024520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!