Mybatis Plus Interceptor

Mybatis Plus Interceptor

  • 1 獲取表名
  • 2 獲取SQL

1 獲取表名

@Component
public class MybatisInterceptor implements Interceptor {private static final List<String> EXCLUDE_TABLE = new ArrayList<>();static {EXCLUDE_TABLE.add("test");}private static final Pattern DELETE_REG = Pattern.compile("from\\s+(\\w+)\\s+where");private static final Pattern INSERT_REG = Pattern.compile("into\\s+(\\w+)\\s+\\(");private static final Pattern UPDATE_REG = Pattern.compile("update\\s+(\\w+)\\s+set");@Overridepublic Object intercept(Invocation invocation) throws Throwable {MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];// 獲取執行SQLString sql = mappedStatement.getBoundSql(invocation.getArgs()[1]).getSql();getTableName(sql);}private String getTableName(String sql) {if (StrUtil.isBlank(sql)) {return null;}sql = sql.toLowerCase(Locale.ROOT);if (StrUtil.startWith(sql, "update")) {Matcher matcher = UPDATE_REG.matcher(sql);return matcher.find() ? matcher.group(1) : null;} else if (StrUtil.startWith(sql, "insert")) {Matcher matcher = INSERT_REG.matcher(sql);return matcher.find() ? matcher.group(1) : null;} else if (StrUtil.startWith(sql, "delete")) {Matcher matcher = DELETE_REG.matcher(sql);return matcher.find() ? matcher.group(1) : null;}return null;}}

2 獲取SQL

@Component
public class MybatisInterceptor implements Interceptor {private static final List<String> EXCLUDE_TABLE = new ArrayList<>();static {EXCLUDE_TABLE.add("test");}private static final Pattern DELETE_REG = Pattern.compile("from\\s+(\\w+)\\s+where");private static final Pattern INSERT_REG = Pattern.compile("into\\s+(\\w+)\\s+\\(");private static final Pattern UPDATE_REG = Pattern.compile("update\\s+(\\w+)\\s+set");@Overridepublic Object intercept(Invocation invocation) throws Throwable {MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];// 獲取執行SQLString sql = mappedStatement.getBoundSql(invocation.getArgs()[1]).getSql();showSql(mappedStatement.getConfiguration(),mappedStatement.getBoundSql(invocation.getArgs()[1]));}private static String showSql(Configuration conf, BoundSql boundSql) {Object param = boundSql.getParameterObject();List<ParameterMapping> mappings = boundSql.getParameterMappings();String sql = boundSql.getSql().replaceAll("[\\s]+", " ");if (param != null && !mappings.isEmpty()) {TypeHandlerRegistry typeHandlerRegistry = conf.getTypeHandlerRegistry();if (typeHandlerRegistry.hasTypeHandler(param.getClass())) {sql = sql.replaceFirst("\\?", getParameterValue(param));} else {MetaObject metaObject = conf.newMetaObject(param);for (ParameterMapping parameterMapping : mappings) {String propertyName = parameterMapping.getProperty();if (metaObject.hasGetter(propertyName)) {Object obj = metaObject.getValue(propertyName);sql = sql.replaceFirst("\\?", getParameterValue(obj));} else if (boundSql.hasAdditionalParameter(propertyName)) {Object obj = boundSql.getAdditionalParameter(propertyName);sql = sql.replaceFirst("\\?", getParameterValue(obj));}}}}return sql;}private static String getParameterValue(Object obj) {String value;if (obj instanceof String) {value = "'" + obj + "'";} else if (obj instanceof Date) {DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);value = "'" + formatter.format(new Date()) + "'";} else {if (obj != null) {value = obj.toString();} else {value = "";}}return value.replace("$", "\\$");}\
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV實例(九)基于深度學習的運動目標檢測(一)YOLO運動目標檢測算法

基于深度學習的運動目標檢測&#xff08;一&#xff09; 1.YOLO算法檢測流程2.YOLO算法網絡架構3.網絡訓練模型3.1 訓練策略3.2 代價函數的設定 2012年&#xff0c;隨著深度學習技術的不斷突破&#xff0c;開始興起基于深度學習的目標檢測算法的研究浪潮。 2014年&#xff0c;…

電腦突然黑屏的解決辦法

記錄一次電腦使用問題 問題描述 基本情況&#xff1a;雷神游戲筆記本 windows10操作系統 64位 使用時間 4年 日期&#xff1a;2023年8月11日 當時 電腦充著電 打開了兩個瀏覽器&#xff1a;edge[頁面加載5個左右]&#xff0c;火狐[頁面加載1個左右] 兩個文件夾 一個百度網盤…

Davinci 報表工具 0.3.0-rc release 文本框模糊查詢不生效問題

背景: 在使用過程中發現davinci 的控制器配置中, 取值配置的對應關系設置 包含 或 不包含時 不生效, 不能實現模糊匹配效果, 只能精確查詢; 問題分析: 通過跟蹤接口及相應代碼, 發現在sql 拼接時沒有對 like 和 not like 類型的值兩側添加百分號, 導致模糊查詢失敗 調用過程…

CentOS系統環境搭建(七)——Centos7安裝MySQL

centos系統環境搭建專欄&#x1f517;點擊跳轉 坦誠地說&#xff0c;本文中百分之九十的內容都來自于該文章&#x1f517;Linux&#xff1a;CentOS7安裝MySQL8&#xff08;詳&#xff09;&#xff0c;十分佩服大佬文章結構合理&#xff0c;文筆清晰&#xff0c;我曾經在這篇文章…

Kotlin 使用 View Binding

解決的問題&#xff1a; 《第一行代碼——Android》第三版 郭霖 P277 視圖綁定的問題 描述&#xff1a; kotlin-android-extensions 插件已經棄用 butter knife 已經棄用 解決辦法 推薦使用 View Binding 來代替 findViewById 使用方法 1、配置 build.gradle 2、在act…

踩坑---uni-app中@input 事件不生效

在開發的時候遇到這么一種情況&#xff0c;我們希望input輸入框的值是范圍是0-100或者保留兩位小數之類的&#xff0c;當你輸入時處理后的結果卻不生效&#xff0c;但是試過很多辦法發現都實現不了&#xff0c;最后是按照以下方法解決的,問題原因是uni-app會延時,導致輸入的結果…

Go語言的主要優勢

Go語言的主要優勢包括: 1. 簡潔和易學 Go語法簡單明了,沒有太多晦澀難懂的概念,上手容易,適合快速開發。 2. 強大的并發支持 利用goroutine和channel,可以非常方便地編寫高效的并發程序。 3. 執行性能好 Go編譯成機器碼,執行性能接近C/C,比解釋型語言更高效。 4. 內存管…

絕對值函數的可導性

絕對值函數的可導性 聲明&#xff1a;下面截圖來自《考研數學常考題型解題方法技巧歸納》

利用Figlet工具創建酷炫Linux Centos8服務器-登錄歡迎界面-SHELL自動化編譯安裝代碼

因為我們需要生成需要的特定字符,所以需要在當前服務器中安裝Figlet,默認沒有安裝包的,其實如果我們也只要在一臺環境中安裝,然后需要什么字符只要復制到需要的服務器中,并不需要所有都安裝。同樣的,我們也可以利用此生成的字符用到腳本運行的開始起頭部分,用ECHO分行標…

學習筆記十八:污點、容忍度

污點、容忍度 污點、容忍度管理節點污點把k8snode2當成是生產環境專用的&#xff0c;其他node是測試的給k8snode1也打上污點 污點、容忍度 給了節點選則的主動權&#xff0c;我們給節點打一個污點&#xff0c;不容忍的pod就運行不上來&#xff0c;污點就是定義在節點上的鍵值屬…

使用python讀Excel文件并寫入另一個xls模版

效果如下&#xff1a; 原文件內容 轉化后的內容 大致代碼如下&#xff1a; 1. load_it.py #!/usr/bin/env python import re from datetime import datetime from io import BytesIO from pathlib import Path from typing import List, Unionfrom fastapi import HTTPExcep…

睿趣科技:抖音開網店現在做還來得及嗎

隨著社交媒體的迅速發展&#xff0c;抖音作為一款短視頻平臺&#xff0c;已經在年輕人中間取得了巨大的成功。而近年來&#xff0c;越來越多的人開始考慮在抖音上開設網店&#xff0c;以迎合這一潮流。那么&#xff0c;抖音開網店現在還來得及嗎? 首先&#xff0c;要明確的是&…

一篇文章教會你搭建私人kindle圖書館,并內網穿透實現公網訪問

搭建私人kindle圖書館&#xff0c;并內網穿透實現公網訪問 在電子書風靡的時期&#xff0c;大部分人都購買了一本電子書&#xff0c;雖然這本電子書更多的時候是被擱置在儲物架上吃灰&#xff0c;或者成為蓋泡面的神器&#xff0c;但當亞馬遜發布消息將放棄電子書在中國的服務…

Kubernetes部署Wordpress時碰到的兩個問題解決

文章目錄 小結問題1解決問題2解決參考 小結 在使用Kubernetes部署Wordpress時返回了兩個問題: Function not implemented: AH00141: Could not initialize random number generator chown: changing ownership of .: Operation not permitted 對這個兩個返回錯誤&#xff0…

利用Python隧道爬蟲ip輕松構建全局爬蟲網絡

嘿&#xff0c;爬蟲程序員們&#xff01;你們有沒有碰到過需要大規模數據爬取的情況&#xff1f;也許你們之前遇到過網站的反爬措施&#xff0c;卡住你們的進度。別擔心&#xff0c;今天我來分享一個利用Python隧道爬蟲ip實現的方法&#xff0c;幫助你們輕松搭建全局爬蟲ip網絡…

jmeter界面設置為中文

jmeter版本&#xff1a;5.6.2 找到jmeter下的bin目錄&#xff0c;打開jmeter.properties 文件 第39行修改為 languagezh_CN去掉前面的#&#xff0c;以后打開就是中文界面了

IC設計仿真云架構

對于IC仿真來說&#xff0c;最重要的是要安全、可維護、高性能的的HPC環境環境。 那么云上如何搭建起一套完整的IC仿真云環境呢&#xff1f; 這種架構應該長什么樣子&#xff1f; 桌面虛擬化基礎架構 將所有桌面虛擬機在數據中心進行托管并統一管理&#xff1b;同時用戶能夠…

RxJava 復刻簡版之三,map 多次中轉數據

案例代碼&#xff1a;https://gitee.com/bobidali/lite-rx-java/commit/292e9227a5491f7ec6a07f395292ef8e6ff69290 RxJava 的調用第一步是封裝了觀察者接受了數據的處理&#xff0c;進一步就是使用 map 將數據操作傳遞給上下游 1、類似Observer.create 創建一個簡單的觀察者…

神經網絡基礎-神經網絡補充概念-05-導數

概念 導數是微積分中的一個概念&#xff0c;用于描述函數在某一點的變化率。在數學中&#xff0c;函數的導數表示函數值隨著自變量的微小變化而產生的變化量&#xff0c;即斜率或變化率。 假設有一個函數 f(x)&#xff0c;其中 x 是自變量&#xff0c;y f(x) 是因變量。函數…

如何評價機械革命?

機械革命是在全球頂尖IT廠商藍天、intel、nvidia、Microsoft等聯手的打造下推出的中高端品牌。&#xff08;零件組裝&#xff09; 機械革命研發實力雄厚&#xff0c;糟糕的外觀設計和極致的游戲性能一樣出名。圖片皆來自于未來世界。