国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

這篇具有很好參考價(jià)值的文章主要介紹了MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

廣而告之

背景

先看成品

實(shí)現(xiàn)步驟

第一步,實(shí)現(xiàn)Interceptor接口

?編輯

第二步,給攔截器指定要攔截的方法簽名

第三步,實(shí)現(xiàn)攔截器的intercept方法。

第四步,在mybatis-config.xml里配置上這個(gè)攔截器插件

第五步,禁用mybatis打印日志


廣而告之

給大家推薦一個(gè)好用的在線工具網(wǎng)站:

常用工具|無憂在線工具

如果我們在學(xué)習(xí)工作過程中,需要用到時(shí)間戳與日期的互轉(zhuǎn),或JSON在線編輯、格式化、校驗(yàn)JSON格式等功能,建議首選這個(gè)常用工具|無憂在線工具。

這個(gè)網(wǎng)站有極簡風(fēng)格的頁面,它的時(shí)間戳轉(zhuǎn)換器,可以智能解析多種常見的日期格式。例如“1949-10-01”或“1949/10-01”,原樣復(fù)制到輸入框就可以智能解析。

它下方的JSON編輯器,支持JSON格式、JSON壓縮、JSON在線編輯,校驗(yàn)JSON格式等功能。

并且有折疊功能,非常強(qiáng)大。

推薦使用:常用工具|無憂在線工具

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

背景

MyBatis可以通過xml或注解配置sql模版,程序運(yùn)行過程中我們可以把參數(shù)填充到sql模版里再執(zhí)行,十分方便。

但是實(shí)際生產(chǎn)過程中我們通常會(huì)有兩個(gè)訴求:

  1. 記錄填充完參數(shù)后,真正執(zhí)行的sql語句
  2. 自動(dòng)記錄sql執(zhí)行結(jié)果

可以借助MyBatis攔截器實(shí)現(xiàn)這一訴求。

先看成品

效果:

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

攔截器代碼:

package org.example.learn.filter;

import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;

import java.sql.Statement;
import java.util.Properties;

@Intercepts({
        @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),
        @Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class})
})
public class InterceptorDome implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Statement statement = (Statement) invocation.getArgs()[0];
        System.out.println("-------------------------------");
        System.out.println("sql:"+statement.toString().substring(statement.toString().indexOf(":")+1));
        Object result =invocation.proceed();
        System.out.println("-------------------------------");
        System.out.println("result:"+ JSONObject.toJSONString(result));
        return result;
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }
}

插件配置:?

    <plugins>
        <plugin interceptor="org.example.learn.filter.InterceptorDome">
            <property name="test" value="test"/>
        </plugin>
    </plugins>

禁用mybatis打印日志:

springboot項(xiàng)目中,在application.properties文件中添加配置:

mybatis.configuration.log-impl=org.apache.ibatis.logging.nologging.NoLoggingImpl

如果不禁用mybatis打印日志,statement.toString()輸出的就是:org.apache.ibatis.logging.jdbc.PreparedStatementLogger@xxx文章來源地址http://www.zghlxwxcb.cn/news/detail-424796.html

實(shí)現(xiàn)步驟

第一步,實(shí)現(xiàn)Interceptor接口

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

Interceptor接口是mybatis用來實(shí)現(xiàn)插件功能的攔截器接口,他有三個(gè)方法,

先看setProperties方法,在xml中配置插件時(shí),用<property>標(biāo)簽配置的參數(shù)會(huì)存儲(chǔ)在setProperties方法的參Properties里,可以通過參數(shù)來改變攔截器的行為。

?然后看plugin方法,這個(gè)方法的參數(shù)target就是要攔截的對象,該方法的實(shí)現(xiàn)很簡單,固定用“return Plugin.wrap(target, this)”實(shí)現(xiàn)即可。

最后一個(gè)方法intercept,是我們主要關(guān)注的攔截方法。后面會(huì)講這個(gè)方法怎么實(shí)現(xiàn)。

第二步,給攔截器指定要攔截的方法簽名

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

回顧java方法簽名有哪幾個(gè)要素:方法所在的類、方法名、方法參數(shù)的順序和類型。

按上圖中的方式,用@Intercepts注解和@Signature屬性來指定好要攔截的方法簽名就可以了??梢灾付ǘ鄠€(gè)方法簽名。

攔截器可以被攔截方法都在這四個(gè)接口里:StatementHandler、Executor、ResultSetHandler、ParameterHandler。

這里只講兩個(gè)方法:StatementHandler.update和StatementHandler.update

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

int update(Statement var1)方法會(huì)在所有的 INSERT UPDATE DELET 執(zhí)行時(shí)被調(diào)用,因此如果想要攔截這類操作,可以攔截該方法。

<E> List<E> query(Statement var1, ResultHandler var2)方法會(huì)在SELECT 查詢方法執(zhí)行時(shí)被調(diào)用。

攔截了這兩個(gè)方法就攔截了日常工作中大部分被執(zhí)行的sql?。

第三步,實(shí)現(xiàn)攔截器的intercept方法。

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

?invocation.getArgs()方法可以獲取被攔截方法的參數(shù)數(shù)組,由方法簽名可知,我們要攔截的兩個(gè)方法的第一個(gè)參數(shù)都是Statement,所以獲取參數(shù)數(shù)組第一個(gè)元素后,可以直接強(qiáng)轉(zhuǎn)為Statement類型。

此時(shí)的Statement已經(jīng)將sql模版與參數(shù)組裝好了,直接調(diào)用statement.toString()方法就能得到真正執(zhí)行的sql。

調(diào)用invocation.proceed()方法會(huì)就會(huì)執(zhí)行被攔截的方法,該方法的返回就是sql執(zhí)行結(jié)果,轉(zhuǎn)換為json字符串打印出來就可以了。

第四步,在mybatis-config.xml里配置上這個(gè)攔截器插件

MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果

第五步,禁用mybatis打印日志

springboot項(xiàng)目中,在application.properties文件中添加配置:

mybatis.configuration.log-impl=org.apache.ibatis.logging.nologging.NoLoggingImpl

我沒有找到上面的配置在xml的寫法吧,讀者自行研究一下吧

如果不禁用mybatis打印日志,statement.toString()輸出的就是:org.apache.ibatis.logging.jdbc.PreparedStatementLogger@xxx

到了這里,關(guān)于MyBatis攔截器-打印出真正執(zhí)行的sql語句和執(zhí)行結(jié)果的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MyBatis攔截器優(yōu)雅實(shí)現(xiàn)數(shù)據(jù)脫敏

    MyBatis攔截器優(yōu)雅實(shí)現(xiàn)數(shù)據(jù)脫敏

    現(xiàn)代網(wǎng)絡(luò)環(huán)境中,敏感數(shù)據(jù)的處理是至關(guān)重要的。敏感數(shù)據(jù)包括個(gè)人身份信息、銀行賬號(hào)、手機(jī)號(hào)碼等,泄露這些數(shù)據(jù)可能導(dǎo)致用戶隱私泄露、財(cái)產(chǎn)損失等嚴(yán)重后果。因此,對敏感數(shù)據(jù)進(jìn)行脫敏處理是一種必要的安全措施。 比如頁面上常見的敏感數(shù)據(jù)都是加*遮擋處理過的,

    2024年02月06日
    瀏覽(20)
  • 自定義注解與攔截器實(shí)現(xiàn)不規(guī)范sql攔截(攔截器實(shí)現(xiàn)篇)

    自定義注解與攔截器實(shí)現(xiàn)不規(guī)范sql攔截(攔截器實(shí)現(xiàn)篇)

    最近考慮myBatis中sql語句使用規(guī)范的問題,如果漏下條件或者寫一些不規(guī)范語句會(huì)對程序性能造成很大影響。最好的方法就是利用代碼進(jìn)行限制,通過攔截器進(jìn)行sql格式的判斷在自測環(huán)節(jié)就能找到問題。寫了個(gè)簡單情景下的demo,并通過idea插件來將myBatis的mapper方法都打上攔截器

    2024年01月22日
    瀏覽(29)
  • 自定義MyBatis攔截器更改表名

    by emanjusaka from ? https://www.emanjusaka.top/2023/10/mybatis-interceptor-update-tableName 彼岸花開可奈何 本文歡迎分享與聚合,全文轉(zhuǎn)載請留下原文地址。 自定義MyBatis攔截器可以在方法執(zhí)行前后插入自己的邏輯,這非常有利于擴(kuò)展和定制 MyBatis 的功能。本篇文章實(shí)現(xiàn)自定義一個(gè)攔截器去改

    2024年02月08日
    瀏覽(25)
  • MyBatis Plus 攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制

    MyBatis Plus 攔截器實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制

    上篇文章介紹的MyBatis Plus 插件實(shí)際上就是用攔截器實(shí)現(xiàn)的,MyBatis Plus攔截器對MyBatis的攔截器進(jìn)行了包裝處理,操作起來更加方便 2.1、InnerInterceptor MyBatis Plus提供的InnerInterceptor接口提供了如下方法,主要包括:在查詢之前執(zhí)行,在更新之前執(zhí)行,在SQL準(zhǔn)備之前執(zhí)行 2.2、編寫簡

    2024年01月17日
    瀏覽(22)
  • 利用Mybatis攔截器實(shí)現(xiàn)自定義的ID增長器

    利用Mybatis攔截器實(shí)現(xiàn)自定義的ID增長器

    原生的Mybatis框架是沒有ID自增器,但例如國產(chǎn)的Mybatis Plus卻是支持,不過,Mybatis Plus卻是缺少了自定屬性的填充;例如:我們需要自定義填充一些屬性,updateDate、createDate等,這時(shí)Mybatis Plus自帶的ID自增器就無法滿足需求;這種時(shí)候我們就需要自定義的ID增加器,可以自定義

    2024年02月19日
    瀏覽(26)
  • Mybatis攔截器注解@Intercepts與@Signature注解屬性說明

    可能有些新手使用mybatis攔截器的時(shí)候可能沒太懂@Signature注解中type,method,args的用法 首先mybatis攔截器可以攔截如下4中類型 Executor sql的內(nèi)部執(zhí)行器 ParameterHandler 攔截參數(shù)的處理 StatementHandler 攔截sql的構(gòu)建 ResultSetHandler 攔截結(jié)果的處理 type:就是指定攔截器類型(ParameterHandl

    2024年02月05日
    瀏覽(28)
  • springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    過濾器是在請求進(jìn)入容器后,但請求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請求結(jié)束返回也是,是在servlet處理完后,返回給前端之前 請求按照上圖進(jìn)入conteoller后執(zhí)行完再返回 過濾器是Servlet規(guī)范中定義的一種組件,可以用于在請求進(jìn)入Web應(yīng)用程序之前或響應(yīng)離開Web應(yīng)用程序之前對請

    2024年02月13日
    瀏覽(20)
  • 基于Mybatis-Plus攔截器實(shí)現(xiàn)MySQL數(shù)據(jù)加解密

    基于Mybatis-Plus攔截器實(shí)現(xiàn)MySQL數(shù)據(jù)加解密

    用戶的一些敏感數(shù)據(jù),例如手機(jī)號(hào)、郵箱、身份證等信息,在數(shù)據(jù)庫以明文存儲(chǔ)時(shí)會(huì)存在數(shù)據(jù)泄露的風(fēng)險(xiǎn),因此需要進(jìn)行加密, 但存儲(chǔ)數(shù)據(jù)再被取出時(shí),需要進(jìn)行解密,因此加密算法需要使用對稱加密算法。 常用的對稱加密算法有AES、DES、RC、BASE64等等,各算法的區(qū)別與優(yōu)劣

    2024年02月16日
    瀏覽(27)
  • MybatisPlusInterceptor實(shí)現(xiàn)sql攔截器(超詳細(xì))

    MybatisPlusInterceptor實(shí)現(xiàn)sql攔截器(超詳細(xì))

    1 . 導(dǎo)入pom 2 . 配置下MybatisPlus的yml 3 . 實(shí)體類 4 .? DTO 5 . MybatisPlus的config 6 . controller 7 . 測試 ?成功實(shí)現(xiàn)sql攔截并進(jìn)行拼接

    2024年02月11日
    瀏覽(15)
  • 關(guān)于MyBatis攔截器失效問題的解決(多數(shù)據(jù)源、分頁插件)

    最近做了一個(gè)備份被delete語句刪除的數(shù)據(jù)的小插件,是用MyBatis的攔截器去做的。 但是發(fā)現(xiàn)在一個(gè)項(xiàng)目中會(huì)失效,沒有去備份刪除的數(shù)據(jù),查看日志發(fā)現(xiàn)請求并沒有進(jìn)入到攔截器中,換句話說就是攔截器失效了。 百度了一下(哎,百度)發(fā)現(xiàn)說的最多的就是分頁插件導(dǎo)致的,

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包