Mybatis日誌引數快速替換佔位符工具的詳細步驟

2022-09-29 22:06:23 字數 3018 閱讀 4112

mybatis log printf工具網頁位址:

mybatis執行的sql的列印格式為:

2020-08-04 09:16:44 -debug - [io-8888-exec-5] .mapper.operation.operationmapper.insert.        debug 145 : ==>  preparing: insert into tulu.t_log_operation (id, module, module_description, type, method, operator, operate_time) values (?, ?, ?, ?, ?, ?, unix_timestamp(now()))

2020-08-04 09:16:44 -debug - [io-8888-exec-5] .mapper.operation.operationmapper.insert.        debug 145 : ==> parameters: 2743672230717162752(long), 1(integer), 登入(string), 3(integer), com.simba.tuloosa.controller.auth.logincontroller.nativelogin(string), 6d63b98cbe5e42d18c126da149162404(string)

2020-08-04 09:16:44 -debug - [io-8888-exec-5] .mapper.operation.operationmapper.insert.        debug 145 : <=jeluxxz=    updates: 1

idea裡有乙個外掛程式mybatis log plugin可以幫我們快速的提取引數拼成完整的sql語句執行,以快速排錯,但是很可惜,他是收費的=(´`*)))唉,整來整取也沒法破解,算了,不如自己寫乙個掛到公網上,也能複製sql隨時拼接,純js即可。

下面我們來逐步分析一下需要的步驟:

很簡單吧,就這三步即可。接下來動手操作。

1、提取statement:只需擷取從preparing到行尾的\n即可

// str為完整的三行或兩行sql 提取預編譯語句

let prepare = str.substring(str.indexof('preparing') + 11, str.indexof('\n'))

indexof(str: string):提取第乙個匹配到的字串的位置,返回其索引值

2、提取引數:只需擷取從parameters到其行尾的\n即可

這時我們需要提取到str的第二個\n換行符,怎麼提取某個字串中的第n個字串呢?

indexof()函式在js中是有過載的,預設提取程式設計客棧第乙個匹配的。它可以接受第二個引數,可以傳入乙個起始位置,即從position(索引)開始取第乙個匹配的。

// js api

indexof(searchstring: string, position?: number): number;

分析:取第二個\n,我們可以將第乙個\n的索引傳入再加1;取第三個\n,則將第二個\n的索引傳入加1,以此類推,所以這是乙個遞迴函式,實現如下

// 返回字串str中的第n字串reg在str中的索引值index

function index(str, reg, n)

// 注意n-1的索引後一定要加1,負責會一直是第乙個reg的索引

return str.indexof(reg, index(str, reg, n - 1) + 1)

}接下來先測試一下index函式,列印正確

const str = 'hello world ok'

const reg = '0'

console.log(index(str, reg, 3)) // 求第三個o的索引,列印結果是12,正確

完成函式提取,所以回到上面的步驟,繼續提取第二個\n的程式設計客棧位置

// 獲取引數字串,去掉所有空格

const params = str.substring(str.indexof('parameters') + 12, index(str, '\n', 2)).replace(/ /g, '')

獲取引數後以逗號切割,返回是乙個字串引數陣列

const array = params.split(',')

// ['2743672230717162752(long)','1(integer)','登入(string)','3(integer)']

提取完畢,則進行第三步的替換

3、替換引數

// 遍歷陣列,每次呼叫一次replace(old, new)即可,對字串引數需要加上引號

array.map(item =>

prepare = prepare .replace('?', newvalue) })

// 遍歷完畢,所有的佔位符也就被引數替換完成啦

console.log(prepare)

// insert into tulu.t_log_operation (id, module, module_description, type, method, operator, operate_time) values (2743672230717162752, 1, '登入', 3, 'com.simba.tuloosa.controller.auth.logincontroller.nativelogin', '6d63b98cbe5e42d18c126da149162404', unix_timestamp(now()))

這樣我們就實現了整個的js遍歷、尋找、替換邏輯,整個過程就是不停的去indexof(),substring()和replace(),是不是很簡單呢,手寫乙個就不用了去找外掛程式了。

我把這個網頁放在了我的公網伺服器上,訪問位址是

方便直接開啟使用。

另外懶得寫樣式和dom,所以**引用了vue.js和elemenui,可能會出現有時候載入js檔案速度比較慢的情況。

最後貼出整個html**:

mybatis log helper

css" rel="external nofollow" >

jeluxxzpx;">轉換

總結

mybatis輸出日誌

想設定mybatis輸出sql語句來除錯,但又懶得看它的原始碼來獲得如何輸出sql日誌,於是網上搜,試啊試,沒乙個靠譜的。只能看原始碼了。因為mybatis是乙個開源的框架,因此的它的日誌不能硬編碼成log4j之類的具體日誌框架,鬼知道你到底用不用log4j,所以mybatis預設用的日誌門面框架s...

Mybatis日誌配置

pom.xml檔案中匯入日誌依賴 log4j log4j 1.2.17 org.slf4j slf4j api 1.7.25 org.slf4j slf4j log4j12 1.7.25 test 在src main resources資料夾下新建乙個配置檔案,檔名一定要為log4j.propert...

MyBatis日誌配置

關於mybatis的日誌,其實mybatis已經弄得很好了,你甚至都不用配置,只要匯入了jar包,mybatis就會自動尋找.具體步驟 2.配置檔案 一般放到src下面,如圖 log4j.properties配置如下 global logging configuration log4j.rootlo...