
MyBatis插件开发基础
发布日期:2021-05-07 13:38:28
浏览次数:19
分类:精选文章
本文共 2471 字,大约阅读时间需要 8 分钟。
四个处理:StatementHandler ParameterHandler ResultSetHandler TypeHandler
四大核心对象:StatementHandler ParameterHandler ResultSetHandler Executor四大核心对象: 1.都涉及到了 拦截器 用于增强 2.四大核心对象都包含了 该增强操作
自定义插件的编写逻辑: 根据MyBatis规则 编写一个 拦截器 ,在拦截器内部加入 自定义增强功能。 下面举例实现一个拦截查询语句,并修改查询参数的拦截器! 实现步骤: a.编写拦截器 b.编写签名注解(注意这个案例因为要对参数进行修改,所以method =“parameterize”)package com.yanqun.my.interceptors;import org.apache.ibatis.executor.statement.StatementHandler;import org.apache.ibatis.plugin.*;import org.apache.ibatis.reflection.MetaObject;import org.apache.ibatis.reflection.SystemMetaObject;import org.apache.ibatis.session.ResultHandler;import java.sql.Statement;import java.util.Properties;//query(Statement statement, ResultHandler resultHandler)@Intercepts({ // @Signature(type = StatementHandler.class , method ="query",args = {Statement.class, ResultHandler.class}) @Signature(type = StatementHandler.class , method ="parameterize",args = { Statement.class})})public class MyInterceptor implements Interceptor { //拦截 @Override public Object intercept(Invocation invocation) throws Throwable { System.out.println("拦截方法...intercept..."); Object target = invocation.getTarget();//目標方法 : select * from student where stuNo = #{stuNo} System.out.println("目標對象" +target); MetaObject metaObject = SystemMetaObject.forObject(target);// metaObject.getValue("参数..") ; Object value = metaObject.getValue("parameterHandler.parameterObject"); System.out.println(value+"---------");//参数值 metaObject.setValue("parameterHandler.parameterObject",2);//11->1 Object value2 = metaObject.getValue("parameterHandler.parameterObject"); System.out.println(value2+"---------"); Object proceed = invocation.proceed();//放行 System.out.println(proceed); return proceed; } @Override public Object plugin(Object target) { //将拦截器中定义的 增强功能 和原来的核心对象 合并起来,称为最终的 核心对象 Object wrap = Plugin.wrap(target, this); System.out.println("plugin...."+wrap); return wrap; } @Override public void setProperties(Properties properties) { // System.out.println("setProperties...."); System.out.println("设置属性:"+properties); //设置属性... }}
在MyBatis核心配置文件conf.xml中配置:
... ...
拦截器默认执行顺序:setProperties --> plugin --> intercept
如果有多个拦截器(拦截器链),执行顺序则如下图所示:
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年03月23日 02时08分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于Altium Designer的电子设计的入门指南
2021-05-08
基于LabVIEW的入门指南
2021-05-08
PCB布局系列汇总
2021-05-08
电阻入门知识
2021-05-08
电容入门知识
2021-05-08
C++面向对象
2021-05-08
正则表达式教程
2021-05-08
专题(七)贪心——AcWing 112. 雷达设备
2021-05-08
深入理解JVM(一)JVM概述、类的声明周期、JVM整体架构、JMM、volatile
2021-05-08
【Java】寻找数组中“主要元素”
2021-05-08
达梦数据库主备部署
2021-05-08
P1455 搭配购买(并查集+dp)
2021-05-08
P3367 【模板】并查集(并查集)
2021-05-08
线段树练习题一(离散化)
2021-05-08
2020.9.12 SSL普及组模拟(第4题)(树)(暴力邻接表80)
2021-05-08
Codeforces 1400E Clear the Multiset(贪心 + 分治)
2021-05-08
JDBC连接数据库
2021-05-08
嵌入式系统设计师学习笔记⑥:存储器的层次架构及Cache详解
2021-05-08
2019CCPC女生专场赛_K - Tetris_打表/模拟_暴力之王
2021-05-08