zoukankan      html  css  js  c++  java
  • MyBatis 插件之拦截器(Interceptor)

    参考 https://blog.csdn.net/weixin_39494923/article/details/91534658

    //项目实际使用  就是在你进行数据库操作时,进行数据的第二次封装

    package com.yueworldframework.core.mybatis;
    
    import com.yueworldframework.core.support.SessionHelper;
    import org.apache.ibatis.executor.Executor;
    import org.apache.ibatis.mapping.MappedStatement;
    import org.apache.ibatis.mapping.SqlCommandType;
    import org.apache.ibatis.plugin.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeanUtils;
    
    import java.lang.reflect.Method;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * Created by wangbs
     */
    @Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
    public class AuditingInterceptor implements Interceptor {
        private static final Logger logger = LoggerFactory.getLogger(AuditingInterceptor.class);
    
        private Properties props = null;
    
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
            SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
            if (invocation.getArgs()[1] instanceof Pojo) {
                Pojo parameter = (Pojo) invocation.getArgs()[1];
                if (SqlCommandType.INSERT == sqlCommandType) {
                    // 初始化主键ID
                    Method initializeUUID = BeanUtils.findDeclaredMethod(parameter.getClass(), "initializeUUID");
                    if (null != initializeUUID) {
                        initializeUUID.invoke(parameter);
                    }
                    if(null==parameter.getCreator()){
                        parameter.setCreator(SessionHelper.getId());
                    }
                    parameter.setUpdater(SessionHelper.getId());
                    parameter.setCreatedDate(new Date());
                    parameter.setUpdatedDate(parameter.getCreatedDate());
                    parameter.setVersion(1);
                } else if (SqlCommandType.UPDATE == sqlCommandType) {
                    parameter.setUpdater(SessionHelper.getId());
                    parameter.setUpdatedDate(new Date());
                    parameter.setVersion(parameter.getVersion() + 1);
                }
            }
            return invocation.proceed();
        }
    
        @Override
        public Object plugin(Object target) {
            if (target instanceof Executor) {
                return Plugin.wrap(target, this);
            } else {
                return target;
            }
        }
    
        public void setProperties(Properties properties) {
            if (null != properties && !properties.isEmpty()) props = properties;
        }
    }
    

      

  • 相关阅读:
    最全的常用正则表达式大全
    服务器调用JS
    ASP-----分页功能的实现
    流操作text文件------读取、保存文档
    linq to sql 增删改查
    数据库的高级应用
    SQL---------表的约束
    面向对象--继承练习
    Winform---文件夹操作
    面向对象--里氏转换练习
  • 原文地址:https://www.cnblogs.com/xiaowangbangzhu/p/11670657.html
Copyright © 2011-2022 走看看