mybatis 自定义插件的使用
今天看了别人的mybatis的教学视频,自己手写了一个简单的自定义的插件,有些细节记录一下。
先看下mybatis的插件的一些说明:
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) --执行sql
ParameterHandler (getParameterObject, setParameters) --获取、设置参数
ResultSetHandler (handleResultSets, handleOutputParameters) --处理结果集
StatementHandler (prepare, parameterize, batch, update, query) --记录sql
这里需要注意的是,这4个类型是固定的,里面的方法也是固定的,不能再被改变的,具体的信息,可以相关的类(Executor.class、ParameterHandler .class、ResultSetHandler .class、StatementHandler .class)查看。
-----------------------------------------------------------------------------------------------------
先定义一个插件拦截器,代码如下:
package com.drafire.testall.interceptor; import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*; import java.util.Properties; /**
* mybatis 自定义插件
*/
@Intercepts(value = {@Signature(
type= Executor.class, //这里对应4个类
method = "update", //这里对应4个类里面的参数
args = {MappedStatement.class,Object.class})}) //这里的参数类型,是对应4个类中的各种方法的参数。如果方法没有参数,这里直接写{}就可以了
public class DrafirePlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
System.out.println("mybatis插件打印了乐乐");
return invocation.proceed();
} @Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
} @Override
public void setProperties(Properties properties) { }
}
配置mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeHandlers>
<typeHandler handler="com.drafire.testall.handler.DrafireStringHandler"></typeHandler>
</typeHandlers> <plugins>
<plugin interceptor="com.drafire.testall.interceptor.DrafirePlugin">
</plugin>
</plugins> <environments default="development">
<environment id="sell">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${ds.sell.driverClassName}"/>
<property name="url" value="${ds.sell.url}"/>
<property name="username" value="${ds.sell.username}"/>
<property name="password" value="${ds.sell.password}"/>
</dataSource>
</environment> <environment id="bank">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${ds.bank.driverClassName}"></property>
<property name="url" value="${ds.bank.url}"></property>
<property name="username" value="${ds.bank.username}"></property>
<property name="password" value="${ds.bank.password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
</mappers>
</configuration>
测试代码如下,测试
package com.drafire.testall.Sevice; import com.drafire.testall.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest
@RunWith(SpringRunner.class)
public class UserServiceTest { @Autowired
private UserService userService; //@Test
public void addUser() {
User user=new User();
user.setId(1);
user.setAmount(110L);
user.setName("李四");
userService.add(user);
} @Test
public void updateUser(){
User user=new User();
user.setId(1);
user.setAmount(50L);
user.setName("王五123");
userService.update(user);
}
}
通过
mybatis 自定义插件的使用的更多相关文章
- Mybatis框架(9)---Mybatis自定义插件生成雪花ID做为表主键项目
Mybatis自定义插件生成雪花ID做为主键项目 先附上项目项目GitHub地址 spring-boot-mybatis-interceptor 有关Mybatis雪花ID主键插件前面写了两篇博客作为 ...
- mybatis自定义插件(拦截器)开发详解
mybatis插件(准确的说应该是around拦截器,因为接口名是interceptor,而且invocation.proceed要自己调用,配置中叫插件)功能非常强大,可以让我们无侵入式的对SQL的 ...
- mybatis自定义插件动态修改sql语句
step1:定义Interceptor实现org.apache.ibatis.plugin.Interceptor import org.apache.commons.logging.Log; imp ...
- 浅析MyBatis(三):聊一聊MyBatis的实用插件与自定义插件
在前面的文章中,笔者详细介绍了 MyBatis 框架的底层框架与运行流程,并且在理解运行流程的基础上手写了一个自己的 MyBatis 框架.看完前两篇文章后,相信读者对 MyBatis 的偏底层原理和 ...
- SSM 使用 mybatis 分页插件 pagehepler 实现分页
使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...
- 2017.12.25 Mybatis物理分页插件PageHelper的使用(二)
参考来自: 官方文档的说明:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md 上篇博客 ...
- mybatis的插件机制
一.mybatis的插件介绍 关于mybatis的插件,我想大家也都用过,就比如最常用的逆向工程,根据表结构生成model,dao,xml文件,还有分页插件,那这些插件的工作原理是怎么样的呢,就比如分 ...
- 一、mybatis的插件介绍
摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制 一.mybatis的插件介绍 关于mybatis的插件,我想大 ...
- mybatis分页插件PageHelp的使用
1.简介 PageHelper 是国内非常优秀的一款开源的 mybatis 分页插件,它支持基本主流与常用的数据库,例如 mysql.oracle.mariaDB.DB2.SQLite.Hsqld ...
随机推荐
- 网络测试技术——802.1X_MD5认证(上篇)
一.MD5认证简介 1.认证过程 (1)无隧道 (2)客户端和服务器之间进行 2.单向认证 (1)服务器对客户端认证 3.缺点 (1)用户名明文传输 (2)弱MD5哈希 二.MD5认证过程 1.客 ...
- 【C# .Net GC】清除非托管类型(Finalize终结器、dispose模式以及safeHandler)
总结 1.一般要获取一个内核对象的引用,最好用SafeHandle来引用它,这个类可以帮你管理引用计数,而且用它引用内核对象,代码更健壮 2.托管中生成并引用非托管,一但非托管和托管中的引用断开(托管 ...
- java变量的初始化之后的默认值
对于类的成员变量 不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值. 1.整数类型(byte.short.int.long)的基本类型变量的默认值为0. 2.单精度浮点型(f ...
- git问题:gpg failed to sign the data fatal: failed to write commit object问题
今天用版本控制工具git提交时一直出现的问题:gpg failed to sign the data fatal: failed to write commit object, gpg是一个加密软件 ...
- JavaWeb-JDBC-Mybatis-Junit-Maven-Lombok
Java与数据库 初识JDBC JDBC是什么? JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数 ...
- anaconda及jupyter notebook的使用之numpy模块的用法(2)
今日内容概要 numpy模块结束 ndarray创建 numpy内置方法 索引与切片(花式索引.布尔索引) 常用函数 统计方法 随机数 numpy的内置方法 import numpy as np 1. ...
- python实现四则运算题库
#主函数(main.py) from generator import Ari_Expression from infixTosuffix import infix_to_suffix import ...
- thinkphp 添加数据
....控制器方法返回视图 public function create() { // return view(); } ...............表单页面 <!DOCTYPE html&g ...
- 免费云服务器-sanfengyun.com
找到了一个能提供免费云服务器的网站-sanfengyun.com,开通了一个免费云服务器,下载node,解压并安装,用npm装了vue-cli,初始化了一个vue项目,准备继续学习vue,加油.
- 命令行安装django以及新建项目及应用
1:安装django项目,使用pip命令进行安装,默认安装的是最高版本,可以使用pip install django==1.1.11进行指定版本安装 2:新建django项目 2.1:首先切换到创建项 ...