mybatis插件

1. Interceptor 就是个接口,供其它插件实现这个接口有三个方法

Object intercept(Invocation invocation)throws Throwable;

传入一个Invocation 对象,我猜应该是指定拦截具体某个target的某个方法

这里面应该写具体的拦截策略,befor after。调用invocation.proceed()执行具体的方法

Object plugin(Object target);

将目标对象与插件绑定

void setProperties(Properties properties);

设置属性

2. Invocation 是一个对象类

对象内部包括目标对象、待执行的方法、参数列表

public Object proceed() 包装了一下method.invoke(target,args)

3. Plugin这个类比较重要

这个类有两个比较重要的方法,一个

public staticObject wrap(Object target, Interceptor interceptor)

这是个静态方法,作为工具用

将target和interceptor两个对象包装在一起。返回代理类对象

实现了Interceptor接口的对象中plugin方法可以调用这个静态方法来实现将intercepter和target绑定到一起

这个方法调用了getSignatureMap方法来取写了antonation的方法,可能是通过注解来标注哪些类需要拦截吧

另一个

publicObject invoke(Object proxy, Method method, Object[] args)

这个方法实现了InvocationHandler接口必须要实现这个方法,并且这个方法在调用对象的方法时是一定要执行的。

这个方法里也比较简单,就是判断有没有拦截器,有执行拦截器,否则直接执行方法

Set<Method> methods = signatureMap.get(method.getDeclaringClass());

if(methods != null&& methods.contains(method)) {

return interceptor.intercept(new Invocation(target, method, args));

}

return method.invoke(target, args);

4. 有个问题就是这几个插件类具体怎么用

1) 首先一定是要实现Interceptor,这个接口里应该有个成员变量来存target吧?通过plugin方法绑定。Plugin方法里应该是调用了Plugin. Wrap这个静态方法。将绑定后的类返回

2) 用户使用时直接new 一个Plugin对象,将target、interceptor、signatureMap传进得去。这样再调用

时间: 2024-10-10 22:11:13

mybatis插件的相关文章

MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)

在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Java反射技术 在Java中反射技术已经大行其道,通过不断的优化性能得到了巨大的提高,而反射技术使得Java的可配置性大大提高.让我们来写一个服务打印hello + 姓名. import java.lang.reflect.InvocationTargetException; import java.l

intellij IDEA mybatis插件破解方法

1>安装mybatis插件,找到mybatis_plus.jar包的位置,在C:\Users\LZHL\.IntelliJIdea2016.3\config\plugins\mybatis_plus\lib 2>新建一个Java Project,把mybatis_plus.jar和javassist-3.17.1.jar添加到工程的Libary 2>新建一个Class: package javaassist; import javassist.CannotCompileException

如何在IDEA上 添加GIT和maven、mybatis插件

IDEA工具上,添加GIT和maven.mybatis插件,相对比较简单: 首先下载GIT.maven.mybatis. 先添加GIT插件: 首先在IDEA找到file中找到setting,然后搜索git,接着将git存放的路径找到即可. 接着是maven插件,也是很简单,打开setting设置,搜索maven,接着路径改了就可以 mybatis的配置,点击run,找到Edit Configurations 接着只需要配置一下即可,在Command line这一行输入mybatis-genera

MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

MyBatis 插件 : 打印 SQL 及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用: Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResult

SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比

引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器).mybatis-Plus实体规范.数据对比 1.相关技术简介 mybatis插件: mybatis插件实际上就是官方针对4层数据操作处理预留的拦截器,使用者可以根据不同的需求进行操作拦截并处理.这边笔者不做详细描述,详细介绍请到官网了解,这里笔者就复用官网介绍. 插件(plugins) MyBati

mybatis 插件的原理-责任链和动态代理的体现

目录 1 拦截哪些方法 2 如何代理 3 代理对象 4 责任链设计模式 @ 如果没有自定义过拦截器, 可以看我前面的文章.如果不知道 JDK 动态代理怎么使用的, 可以看我这文章. 责任链设计模式理解起来很简单, 网上找个例子看看即可. mybatis 插件的原理使用的是动态代理和责任链来实现的. 1 拦截哪些方法 在前面说过, 可以通过注解 Intecepts 和 Signature 来进行指定拦截哪些方法. 然而, 并不是说所有的方法都可以拦截的. mybatis 拦截器所拦截的方法, 有如

mybatis插件机制原理

mybatis插件机制及分页插件原理 参考链接:mybatis插件机制及分页插件原理 如何编写一个自定义mybatis插件 参考链接:mybatis 自定义插件的使用 原文地址:https://www.cnblogs.com/jxxblogs/p/12150439.html

Mybatis插件原理和PageHelper结合实战分页插件(七)

今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis的插件原理.PageHelper 的官方网站:https://github.com/pagehelper/Mybatis-PageHelper 一.Plugin接口 mybatis定义了一个插件接口org.apache.ibatis.plugin.Interceptor,任何自定义插件都需要实现这个接口PageHelper就实现了改接口 package org.apach