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...