mysql拦截器实现crud_一劳永逸!!利用拦截器全局实现Mybatisplus去除字符串空格...

为了解决用户输入数据前后空格问题,避免因空格导致的查询异常,本文介绍了如何使用Mybatis拦截器(Interceptor)实现全局处理。通过拦截Executor接口的query和update方法,对查询条件和插入/更新的数据进行处理,自动去除字符串空格。测试表明,该方法对查询和插入操作均有效。
摘要由CSDN通过智能技术生成

用户提交的数据信息,要去掉字符串前后面的空格,即TRIM,绝大多数企业应用都需要。

一个一个改?

太麻烦了!

用户输入条件查询数据,同样要去掉空格,否则可能导致查不出来数据。并且,通常,我们在排查这样的问题的时候,也许只有眼明心细的人,才能发现原来是有空格导致的。

一个一个改?

太麻烦了!

本文使用拦截器(Interceptor)来实现全局处理。mybatis自带Interceptor接口,我们只需实现接口即可。

mybatisplus或mybatis的数据库操作,主要体现在update和query两个方法上,见下面mybatis-**.jar的Executor接口。

我们所需要的拦截的,也是这个接口所定义的CRUD操作方法。

mybatis的拦截器同样定义在mybatis-**.jar中。

20200929140950213vr5kwt9m7e3t8dt_2.png

查询数据拦截器处理

查询数据拦截Executor.query方法。对于mybatisplus,请求参数一般是lambda表达式,所以我们对lambda表达式携带的数据进行改造。

代码如下:

20200929140950213vr5kwt9m7e3t8dt_0.gif

View Code

插入数据的拦截器处理

插入数据\修改数据统一拦截Executor.update方法。请求参数一般是pojo对象,利用反射来修改属性的值。

代码如下:

20200929140950213vr5kwt9m7e3t8dt_0.gif

20200929140950213vr5kwt9m7e3t8dt_1.gif

@Slf4j

@Component

@Intercepts({@Signature(type= Executor.class, method = "update", args = {MappedStatement.class, Object.class})})public class MybatisInterceptor implementsInterceptor {

@Overridepublic Object intercept(Invocation invocation) throwsThrowable {

MappedStatement mappedStatement= (MappedStatement) invocation.getArgs()[0];

String sqlId=mappedStatement.getId();

log.debug("------sqlId------" +sqlId);

SqlCommandType sqlCommandType=mappedStatement.getSqlCommandType();

Object parameter= invocation.getArgs()[1];

log.debug("------sqlCommandType------" +sqlCommandType);if (parameter == null) {returninvocation.proceed();

}if (SqlCommandType.INSERT == sqlCommandType || SqlCommandType.UPDATE ==sqlCommandType) {

Field[] fields=oConvertUtils.getAllFields(parameter);for(Field field : fields) {if (field.getType().equals(String.class)) {

field.setAccessible(true);

Object o=field.get(parameter);

field.setAccessible(false);

String newVal= o == null ? "": String.valueOf(o).trim();

field.setAccessible(true);

field.set(parameter, newVal);

field.setAccessible(false);

}

}

}returninvocation.proceed();

}

}

View Code

测试

下面testcase用来查询数据。同样插入也OK。

20200929140950213vr5kwt9m7e3t8dt_3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值