MyBatis空where拦截器

摘要:
mybatis的拦截器只能委托指定的四个类:ParameterHandler、ResultSetHandler、StatementHandler和Executor。

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

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

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

    1.实现

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

  • MyBatis空where拦截器第2张

    MyBatis空where拦截器第3张

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

  • /** * 反射工具 * * @author: xiaobaoqiu Date: 15-8-22 Time: 上午11:52 */
  • MyBatis空where拦截器第4张

    MyBatis空where拦截器第5张

    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拦截器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Loadrunner原理及基准测试js 常用创建a标签实现下载功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mybatis mapper判断if条件写法

//1 mybatis处理不同字符串 String s1 = null, s2 = ""; // mapper对于这两种情况判断不同,下面语句可以排除这两种情况 <if test="str != null and str != ''"></if> //2 判断集合时候为空 if test="arr != null and arr....

MyBatis(四)映射文件 之 参数获取详解#{} 与 ${}

一、#{} 与${} 的取值 相同点: #{}:可以获取map中的值或者pojo对象属性的值; ${}:可以获取map中的值或者pojo对象属性的值; 区别: #{}:是以预编译的形式,将参数设置到sql语句中;PreparedStatement;防止sql注入; ${}:取出的值直接拼装在sql语句中;会有安全问题; 大多情况下,我们去参数的值都应该去使...

mybaits3.2.8 别名包扫描通配符

<mybatis.version>3.2.8</mybatis.version><mybatis.spring.version>1.2.2</mybatis.spring.version><mybatis.generator.version>1.3.2</mybatis.generator....

MyBatis + PageHelper

1. 引入分页插件 在 pom.xml 中添加如下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版...

spring-boot整合mybatis(web mysql logback配置)

pom.xml相关的配置说明。 配置文件看着比价多,在创建spring-boot项目的时候,自需要添加web,mysql,mybatis三个选项即可 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns...

MyBatis一个Mapper方法里写多个SQL

MyBatis一个Mapper方法里写多个SQL,需要配置: 如 <updateid="rejectOrderLoan"parameterType="com.ly.fn.biz.loan.service.model.OrderLoan"> update OrderLoan <set> financeEndDate = NULL,...