MyBatis插件开发基础

四个处理: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中配置:

<?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>
...
       <plugins>
           <plugin interceptor="com.yanqun.my.interceptors.MyInterceptor">
           <!--配置一些属性参数!-->
               <property name="name" value="zs"/>
               <property name="age" value="23"/>
           </plugin>
    </plugins>
...
  </configuration>

拦截器默认执行顺序:setProperties --> plugin --> intercept
如果有多个拦截器(拦截器链),执行顺序则如下图所示:
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis基础上只做增强不做改变,为简化开发、提高效率而生。使用原生的Mybatis编写持久层逻辑时,所需要的代码是比较繁琐的,需要定义Mapper接口和Mapper.xml文件,每一个方法都需要编写对应的sql语句,会存在很多大量的重复工作,使用MP之后,对通用的方法做了高度的抽取,避免了很多重复工作,可以非常快速的实现了单表的各种增、删、改、查操作。除此之外,MP还提供了其他的高级功能,如:枚举、插件、ActiveRecord、SQL注入等。 本课程全面讲解了Mybatis-Plus框架的使用,从快速入门到原理分析再到插件的应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法 n 条件构造器 n Oracle 主键Sequence n 通用枚举n ActiveRecord n 逻辑删除 l 插件 n 执行分析插件 n 性能分析插件 n 乐观锁插件 主讲内容 章节一:快速入门 1. Mybatis-Plus简介 2. 快速入门 3. 通用CRUD 4. 配置 5. 条件构造器 章节二:进阶 1. ActiveRecord 2. Oracle 主键Sequence 3. 插件 章节三:高级应用 1. Sql 注入器 2. 自动填充功能 3. 逻辑删除 4. 通用枚举 5. 代码生成器 6. MybatisX 快速开发插件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值