柚子快報(bào)邀請(qǐng)碼778899分享:mybatis的攔截器
柚子快報(bào)邀請(qǐng)碼778899分享:mybatis的攔截器
文章目錄
第三個(gè)是參數(shù)攔截器第四個(gè)是結(jié)果集攔截器mybatis攔截器-筆試題1.筆試題
JDBC的執(zhí)行流程3.執(zhí)行sql語句,返回執(zhí)行結(jié)果
mybatis的四種攔截器
第一個(gè)是執(zhí)行攔截器:
Executor(執(zhí)行器攔截器):
用途:攔截MyBatis執(zhí)行器方法的執(zhí)行。
第二個(gè)是語句攔截器
StatementHandler(語句攔截器):
– 用途:攔截SQL語句的執(zhí)行。
使用:可以在SQL語句執(zhí)行之前修改或增強(qiáng)它們。例如,可以向WHERE子句添加額外的條件或記錄執(zhí)行的語句。分頁(yè)等
第三個(gè)是參數(shù)攔截器
ParameterHandler(參數(shù)攔截器):
用途:攔截SQL語句的參數(shù)設(shè)置。 使用:允許在將參數(shù)設(shè)置到SQL語句之前修改或驗(yàn)證它們。例如,可以對(duì)作為參數(shù)傳遞的敏感信息進(jìn)行加密或解密。
可以進(jìn)行數(shù)據(jù)庫(kù)某個(gè)字段的監(jiān)控,可以進(jìn)行mybatis攔截器的使用,進(jìn)行數(shù)據(jù)庫(kù)的字段追蹤
第四個(gè)是結(jié)果集攔截器
用途:攔截從SQL語句返回的結(jié)果集的處理。 使用:可以在將結(jié)果集返回給應(yīng)用程序之前修改或分析它們。例如,可以對(duì)結(jié)果集數(shù)據(jù)進(jìn)行轉(zhuǎn)換或執(zhí)行額外的計(jì)算。
mybatis攔截器-筆試題
1.筆試題
實(shí)現(xiàn) 進(jìn)入解析器
只要有人更改,那么要告訴
可以指定表中的字段進(jìn)行監(jiān)控
有price或者敏感字段,那么就要對(duì)字段進(jìn)行 有人修改的時(shí)候,那么就要發(fā)郵件或者報(bào)警,讓人知道這件事情
這個(gè)需求
JDBC的執(zhí)行流程
1.注冊(cè)驅(qū)動(dòng)
首先使用反射
注冊(cè)驅(qū)動(dòng) jar包里面有什么就加載什么
獲取連接對(duì)象
jdbc底層使用socket進(jìn)行連接數(shù)據(jù)庫(kù)的 ,打開connection
3.執(zhí)行sql語句,返回執(zhí)行結(jié)果
通過執(zhí)行startement實(shí)例執(zhí)行sql語句
處理執(zhí)行結(jié)果
resultSet
使用stament攔截器
實(shí)現(xiàn)思路
首先 實(shí)現(xiàn)mybatis的 Interceptor 接口
然后實(shí)現(xiàn)里面的方法
然后
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("測(cè)試");
Object localUser = threadLocal.get();
//threadLocal.get() // Field lastUpdateBy = ReflectUtil.getField(parameterObject.getClass(), “l(fā)astUpdateBy”); // // 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(); } }
實(shí)現(xiàn)的是參數(shù)的攔截器去實(shí)現(xiàn)思路
柚子快報(bào)邀請(qǐng)碼778899分享:mybatis的攔截器
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。