# mybatis-plugins **Repository Path**: relaxx/mybatis-plugins ## Basic Information - **Project Name**: mybatis-plugins - **Description**: mybatis插件 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-05 - **Last Updated**: 2025-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mybatis-plugins #### 介绍 这是一个 mybatis 插件集合,提供包括数据加密/解密,数据脱敏,数据绑定等多种简便功能,基于 spring boot 自动化配置,可实现零配置启动,对业务代码几乎无入侵。 #### 工作原理 本工具是基于 mybatis 的插件机制编写的,其底层基于 JDK 动态代理 + 拦截器链实现,mybatis 拦截器允许我们在已映射语句的执行过程中的某个时机进行拦截调用。 常见的可拦截方法包括: | 拦截对象 | 拦截方法 | 说明 | | ---- | ---- | --- | | Executor | update | insert/delete/update | | Executor | query | select | | Executor | commit | 提交事务 | | Executor | rollback | 回滚事务 | | ParameterHandler | setParameters | 设置参数 | | StatementHandler | prepare | 预编译SQL | | StatementHandler | update | insert/delete/update | | StatementHandler | query | select | | ResultSetHandler | handleResultSets | 处理结果集 | ##### 拦截器链的构建 mybatis中的InterceptorChain类用来创建拦截器链,内部持有一个interceptors的List,拦截器的顺序就是在配置文件中配置的拦截器的顺序,因为拦截器有顺序之分,所以这里用一个List维护。 ```java public class InterceptorChain { private final List interceptors = new ArrayList<>(); // 构建拦截器链 public Object pluginAll(Object target) { for (Interceptor interceptor : interceptors) { target = interceptor.plugin(target); } return target; } } ``` InterceptorChain.pluginAll(target)方法用于构建拦截器链,那么,这个方法在何时被调用呢? 以Executor为例,在每次调用Configuration.newExecutor方法时,将目标对象传入interceptorChain.pluginAll,返回executor的代理对象,在这个代理对象的内部,拦截器链已经形成了。 ```java public class Configuration { public Executor newExecutor(Transaction transaction, ExecutorType executorType) { executorType = executorType == null ? defaultExecutorType : executorType; Executor executor; if (ExecutorType.BATCH == executorType) { executor = new BatchExecutor(this, transaction); } else if (ExecutorType.REUSE == executorType) { executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } if (cacheEnabled) { executor = new CachingExecutor(executor); } return (Executor) interceptorChain.pluginAll(executor); } } ``` #### 软件架构 ``` ├── mybatis-plugins │ ├── mybatis-plugin-core(基础内核,包括通用模型,注解,常量,枚举,工具类等) │ ├── mybatis-encrypt-plugin(数据加密/解密插件) │ └── mybatis-sensitive-plugin(数据脱敏插件) ``` #### 安装教程 ```xml com.relax mybatis-encrypt-plugin 0.0.1 com.relax mybatis-sensitive-plugin 0.0.1 ``` #### 使用说明 详细使用说明见各插件内README文档。