mybatis的拦截器

文章目录

  • 第三个是参数拦截器
  • 第四个是结果集拦截器
  • mybatis拦截器-笔试题
    • 1.笔试题
  • JDBC的执行流程
  • 3.执行sql语句,返回执行结果


mybatis的四种拦截器

第一个是执行拦截器:

  1. Executor(执行器拦截器):
  • 用途:拦截MyBatis执行器方法的执行。

第二个是语句拦截器

  1. StatementHandler(语句拦截器):

– 用途:拦截SQL语句的执行。

  • 使用:可以在SQL语句执行之前修改或增强它们。例如,可以向WHERE子句添加额外的条件或记录执行的语句。分页等

第三个是参数拦截器

  1. ParameterHandler(参数拦截器):
  • 用途:拦截SQL语句的参数设置。

  • 使用:允许在将参数设置到SQL语句之前修改或验证它们。例如,可以对作为参数传递的敏感信息进行加密或解密。

可以进行数据库某个字段的监控,可以进行mybatis拦截器的使用,进行数据库的字段追踪

第四个是结果集拦截器

  • 用途:拦截从SQL语句返回的结果集的处理。

  • 使用:可以在将结果集返回给应用程序之前修改或分析它们。例如,可以对结果集数据进行转换或执行额外的计算。

mybatis拦截器-笔试题

1.笔试题

在这里插入图片描述

实现
进入解析器

只要有人更改,那么要告诉

可以指定表中的字段进行监控

有price或者敏感字段,那么就要对字段进行
有人修改的时候,那么就要发邮件或者报警,让人知道这件事情

这个需求

JDBC的执行流程

在这里插入图片描述
1.注册驱动

首先使用反射

注册驱动 jar包里面有什么就加载什么

获取连接对象

jdbc底层使用socket进行连接数据库的
,打开connection

3.执行sql语句,返回执行结果

通过执行startement实例执行sql语句

处理执行结果

resultSet

使用stament拦截器

实现思路

首先
实现mybatis的 Interceptor 接口

然后实现里面的方法

然后

    ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();
    Object parameterObject = parameterHandler.getParameterObject();

package com.beiyou.mybatis;

import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.ReflectUtil;
import com.beiyou.entity.BaseEntity;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;

import java.beans.Statement;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;
import java.sql.PreparedStatement;

/**

  • @author healer

  • @Description MyParameterHandler

  • @data 2024-07-11 14:50
    */
    @Component
    @Intercepts({@Signature(type = ParameterHandler.class, method = “setParameters”, args = {PreparedStatement.class})})
    public class MyParameterHandler implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
    ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();
    Object parameterObject = parameterHandler.getParameterObject();

     ThreadLocal threadLocal = new ThreadLocal();
     threadLocal.set("测试");
     Object localUser = threadLocal.get();
    

//threadLocal.get()
// Field lastUpdateBy = ReflectUtil.getField(parameterObject.getClass(), “lastUpdateBy”);
//
// if (lastUpdateBy != null) {
// ReflectUtil.setFieldValue(parameterObject, lastUpdateBy, threadLocal.get());
// }
//
if (parameterObject instanceof BaseEntity && localUser != null) {
BaseEntity entity = (BaseEntity) parameterObject;
entity.setLastUpdateBy(localUser.toString());
}
return invocation.proceed();
}
}

实现的是参数的拦截器去实现思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI版Siri要明年见,研究表明ChatGPT暂无法取代程序员,Kimi推出浏览器插件

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 根据彭博社记者马克古尔曼的最新消息,苹果公司今年不会推出全新的Apple Intelligence驱动的Siri,该公司计划在明年1月开始测试,并在iOS 18.4中才推出正式版本。 此前…

未来工业革命:区块链在工业4.0中的角色与应用

随着科技的迅猛发展,人类社会正在逐步迈向工业4.0时代。在这一新时代的背景下,区块链技术作为一种创新性的分布式账本技术,正逐步在工业领域展示其独特的价值和潜力。本文将深入探讨区块链在工业4.0中的角色与应用,分析其对工业生…

windows安装Docker Desktop及国内镜像

简介 Docker 是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。通过Docker工具,简化了应用的部署、配置和管理过程,提高…

dataX入门

下载dataX https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 然后 下载后解压至本地某个目录,进入bin目录,即可运行同步作业: $ cd {YOUR_DATAX_HOME}/bin $ python datax.py {YOUR_JOB.json} 要求你有python…

FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试

目录 创建工程创建 HDL 代码仿真添加管脚约束添加时序约束生成 bit 文件下载ILA 在线调试 创建工程 型号选择:以 AXU9EG 开发板为例,芯片选择 xczu9eg-ffvb1156-2-i 创建 HDL 代码 注意:由于输入时钟为 200MHz 的差分时钟,因此…

【Python】已解决:ModuleNotFoundError: No module named ‘nltk’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘nltk’ 一、分析问题背景 在使用Python进行自然语言处理或文本分析时,我们经常会用到各种库来辅助我们的工…

【ACM 独立出版,高录用EI稳检索】2024年大数据与数字化管理国际学术会议 (ICBDDM 2024,8月16-18)

2024年大数据与数字化管理国际学术会议 (ICBDDM 2024),将于2024年8月16-18日在中国上海召开。 “大数据与数字化管理”作为会议主题,旨在聚焦这一跨学科领域中最新的理论研究、技术进展、实践案例和未来趋势。本主题探讨的研究方向涵盖了大数据的收集、…

GD32F303RET6读取SGM58031电压值

1、SGM58031芯片详解 (1)SGM58031是一款低功耗,16位精度,delta-sigma (ΔΣ)模数转换器(ADC)。它从3V到5.5V供电。 (2)SGM58031包含一个片上参考和振荡器。它有一个I2C兼容接口,可以选择四个I2…

15、电科院FTU检测标准学习笔记-基本性能

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…

Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇

Nginx七层(应用层)反向代理 SCGI代理scgi_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this art…

利用Altair One 云平台,轻松实现全球企业产品研发创新与优化

在过去的几十年里,工程师和数据科学家引入了大量改变世界的技术,但他们的工作方式却出人意料地停滞不前。技术的革新也带来了效率的不断提升。 面对众多企业的同样难题,Altair整合产品,创造出了用于协作工程、数据工程和分析应用程…

数列分块<2>

本期是数列分块入门<2>。该系列的所有题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:http://hzwer.com/8053.html sto hzwer orz %%% [转载] 好像上面的链接↑打不开&#xff0c;放一个转载:https://www.cnblogs.…

【C++】C++-机房收费管理系统(源码+注释)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

RK3568平台开发系列讲解(内存篇)Linux进程内存的消耗统计

🚀返回专栏总目录 文章目录 一、VSS(Virtual Set Size)二、RSS(Resident Set Size)三、PSS(Proportional Set Size)四、USS(Unique Set Size)五、其他工具Linux 提供了多种进程内存占用的度量指标, 它们反映了不同的内存使用特征: VSS 反映进程虚拟内存总需求, 包括未…

Oracle基础以及一些‘方言’(一)

1、什么是Oracle ORACLE数据库系统是美国ORACLE公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据库是目前世界…

企业内多个系统如何实现单点登录/SSO统一认证

背景 在现代化企业中&#xff0c;随着业务的不断扩展和技术的不断进步&#xff0c;企业通常会使用多个系统来支持其日常运营&#xff0c;如OA、HR、CRM、研发应用&#xff08;Git、Jira等&#xff09;、财务系统、档案管理系统等。然而&#xff0c;这些系统往往各自为政&#…

基于Spring Boot的高校后勤餐饮管理系统

1 项目介绍 1.1 研究背景 “互联网”时代的到来&#xff0c;既给高校后勤管理发展带来了机遇&#xff0c;也带来了更大的挑战。信息化应用已经开始普及&#xff0c;传统的高校后勤餐饮管理模式往往存在着效率低下、信息不透明、资源浪费等问题&#xff0c;已经难以满足现代高…

Chromium源码阅读(7):了解WTF的静态字符串机制

在浏览器的实现中&#xff0c;处理HTML和CSS涉及大量的字符串操作&#xff0c;这些操作通常包括字符串的比较、查找和匹配。如果使用普通的字符串对这些进行操作&#xff0c;在面临大量DOM元素和CSS规则时会导致效率低下。 例如&#xff0c;当解析CSS时&#xff0c;属性名如col…

人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解。本文将给大家展示全连接神经网络与代码详解&#xff0c;包括全连接模型的设计、数学原理介绍&#xff0c;并从手写数字识别到猫狗识…

Neo4j安装

下载地址&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 1.安装jdk&#xff0c;Neo4j 3.0需要jdk8&#xff0c;2.3.0之前的版本建议jdk7。Neo4j最新版本5.21.2&#xff0c;对应jdk版本17 2.将下载的zip文件解压到合适路径。 3.设置环境变量NEO4J_H…