老年人教程:MyBatis拦截器动态修改SQL(更新与插入)语句

注:本文编写与 2019年12月17日, 内容可能存在时效性问题。
数据库使用MySQL5.7 集成于SpringBoot 2.0.X , 引用国产的开源工具类Hutool

本教程建议显示大纲视图 配合食用

一 、简介

1. 设定使用场景

任意 insert 、update 语句,都需要记录下语句的操作用户(CREATOR), 但由于系统早期设计不规范,大量SQL语句中,部分有写入CREATOR部分没有CREATOR,现在需要设计一段代码,能够自动拦截下所有的insert和update 语句,自动添加user 字段,及其字段值;

例如插入语句:

insert into table(id,name,age) values("efdefbb1970b486f8985fa19ab3ab22e","筱黄舒",12);
# 拦截后修改成
insert into table(id,name,age,createor) values("efdefbb1970b486f8985fa19ab3ab22e","筱黄舒",12,"admin");

2. 教程所用到的框架

此处列出 pom.xml 所依赖的一些包的版本,其中用到hutool这个工具类

<properties>
  <java.version>1.8</java.version>
  <hutool-all.version>4.5.1</hutool-all.version>
  <spring-boot-start.version>2.0.7.RELEASE</spring-boot-start.version>
  <druid-spring-boot-starter.version>1.1.10</druid-spring-boot-starter.version>
  <mysql-connector-java.version>5.1.47</mysql-connector-java.version>
  <spring-boot-start-mybatis.version>2.0.0</spring-boot-start-mybatis.version>
  .......
</properties>

二、拦截器

2.1 创建拦截器

@Intercepts({
   @Signature(
      type = Executor.class, method = "update",
      args = {
   MappedStatement.class, Object.class})})
@Component
public class demo implements Interceptor {
   
   private static final int PARAMETER_INDEX =  1;

private static final int MAPPED_STATEMENT_INDEX  = NumConstant.COMMON_NUMBER_ZERO;

private static final String UPDATE_SQL_TYPE = "Update";
private static final String INSERT_SQL_TYPE = "Insert";

private Logger logger  = LoggerFactory.getLogger(ModifyInterceptor.class);

private static LRUCache<String, Boolean> modifyCache = new LRUCache<>(Byte.MAX_VALUE);
private static LRUCache<String, Boolean> insertCache = new LRUCache<>(Byte.MAX_VALUE);
   
   /**
   * 拦截主要的逻辑
   */   
   @Override
   public Object intercept(Invocation invocation) throws Throwable {
   
      return null;
   }


   @Override
   public Object plugin(Object o) {
   
      return o instanceof Executor? Plugin.wrap(o, this):o;
   }


   @Override
   public void setProperties(Properties properties) 
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值