美文网首页
Mybatis 拦截器实现

Mybatis 拦截器实现

作者: 嘿小逗比就是你 | 来源:发表于2018-07-06 17:06 被阅读0次
  • mybatis提供了Interceptor接口可以对数据库操作进行拦截。
  • maven 依赖
<dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.5</version>
 </dependency>

或者添加maven-plugin

<plugin>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.0</version>
      <configuration>
            <!--允许移动生成的文件-->
            <verbose>true</verbose>
            <!--允许覆盖生成的文件-->
            <overwrite>true</overwrite>
       </configuration>
 </plugin>
  • 拦截器启用
    由于项目为springcloud框架,故秩序在拦截器上添加@Component即可
package com.hyx.interceptor;

import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.Date;
import java.util.Properties;


/**
 * create by 嘿小逗比就是你 on 2018/7/6
 */
@Intercepts( {
        @Signature(method = "update", type = Executor.class, args = {
                MappedStatement.class, Object.class})})
@Component
public class MybatisInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        //需要进行的操作
        Object[] args = invocation.getArgs();//
        MappedStatement ms = (MappedStatement) args[0];
        Class<? extends Object> clazz = args[1].getClass();
        Method[] methods = clazz.getDeclaredMethods();
        if("INSERT".equals(ms.getSqlCommandType().name())){
              for (Method method : methods) {//获取字段名
              methodName = method.getName();
              }
            Method getTime = clazz.getMethod("getTime");//通过字段名获取值
            Object time= getTime.invoke(args[1]);
            Method setTime = clazz.getMethod("setTime", Date.class);
            setTime.invoke(args[1], new Date());// 设置值
        }
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
    }

}

  • 注意:
    @Signature中常用method有"update","query","prepare",而且对于接口Executor,method只定义了update,query,flushStatements,commit,rollback,createCacheKey,isCached,clearLocalCache,deferLoad,getTransaction,close,isClosed这几个方法,没有delete和insert方法。insert和delete操作均使用"update"。
@Intercepts( {
       @Signature(method = "query", type = Executor.class, args = {
              MappedStatement.class, Object.class, RowBounds.class,
              ResultHandler.class }),
       @Signature(method = "update", type = Executor.class, args = {
                MappedStatement.class, Object.class})
       @Signature(method = "prepare", type = StatementHandler.class, args = { Connection.class }) })

相关文章

  • 利用mybatis拦截器实现分页

    利用mybatis拦截器实现分页 mybatis-config.xml

  • MyBatis - 实战指南

    MyBatis 拦截器 MyBatis 拦截器 - 原理探究 MyBatis 拦截器 - 自动区分环境 MyBat...

  • Mybatis拦截器介绍

    Mybatis拦截器介绍 Mybatis拦截器设计的初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去...

  • Mybatis拦截器

    一 Mybatis拦截器介绍 Mybatis拦截器设计的初衷就是为了供用户在某些时候可以实现自己的逻辑而不必...

  • mybaits有几种分页方式?

    三.拦截器分页 创建拦截器,拦截mybatis接口方法id以ByPage结束的语句 四.RowBounds实现分页...

  • Mybatis插件

    Mybatis插件 Mybatis插件又称拦截器。 Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器...

  • mybatis plugin

    mybatis plugin就是一个拦截器,用于实现额外功能,可以算作mybatis的一个运作规则。 mybati...

  • mybatis(3)—自定义拦截器(上)基础使用

    mybatis自定义拦截器(一)基本使用mybatis自定义拦截器(二)对象详解 1. 拦截器注解 1. myba...

  • "犯罪心理"解读Mybatis拦截器

    原文链接:"犯罪心理"解读Mybatis拦截器 Mybatis拦截器执行过程解析 文章写过之后,我觉得 “Myba...

  • Mybatis插件机制详解

    1 概述 Mybatis插件又称拦截器,Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些...

网友评论

      本文标题:Mybatis 拦截器实现

      本文链接:https://www.haomeiwen.com/subject/rrrbuftx.html