日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路

瀏覽:149日期:2023-10-19 11:47:26
問(wèn)題產(chǎn)生

我們?cè)谑褂胢ybatis的過(guò)程中,如果開(kāi)啟了mysql的日志功能的話,會(huì)在控制臺(tái)打印一些sql的信息,但是日志中的sql語(yǔ)句,是沒(méi)有拼接參數(shù)的,也就是說(shuō),是不可以直接放到數(shù)據(jù)庫(kù)中執(zhí)行的。some times,我們?cè)谡{(diào)試問(wèn)題的時(shí)候,會(huì)希望有一個(gè)直接可以運(yùn)行的SQL語(yǔ)句,那將方便很多,特別是在sql語(yǔ)句綁定參數(shù)很多的時(shí)候。

現(xiàn)象描述

默認(rèn)的mysql日志配置和打印情況如下:

<settings> <setting name='logImpl' value='STDOUT_LOGGING'/></settings>

==> Preparing: select * from hwc_users a where a.name = ? and a.age = ? ==> Parameters: huwenchao(String), 35(Integer)<== Total: 0解決思路

通過(guò)思考,我覺(jué)得可以通過(guò)mybatis的插件機(jī)制來(lái)解決這個(gè)問(wèn)題。首先,我們查看源碼,發(fā)現(xiàn)mysql的PreparedStatement的toString方法中,直接通過(guò)asSql方法展示了完整的sql語(yǔ)句:

手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路

其次,mybatis中StatementHandler以及ParameterHandler接口中,都有相應(yīng)的方法能夠攔截到Statement:

手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路

具體實(shí)現(xiàn)

我們隨機(jī)選擇攔截ParameterHandler來(lái)進(jìn)行完整sql語(yǔ)句的輸出:

步驟一、編寫攔截器類,并配置攔截的類和方法:

package com.huwc.interceptor;import com.mysql.jdbc.JDBC42PreparedStatement;import org.apache.ibatis.executor.parameter.ParameterHandler;import org.apache.ibatis.logging.jdbc.PreparedStatementLogger;import org.apache.ibatis.plugin.*;import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.reflect.Field;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.sql.PreparedStatement;import java.util.Properties;@Intercepts({ @Signature(type = ParameterHandler.class, method = 'setParameters', args = {PreparedStatement.class})})public class MybatisLogInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable {PreparedStatement statement = (PreparedStatement) invocation.getArgs()[0];PreparedStatement statement1 = null ;if(Proxy.isProxyClass(statement.getClass())){ InvocationHandler handler = Proxy.getInvocationHandler(statement); if(handler.getClass().getName().endsWith('.PreparedStatementLogger')){Field field = handler.getClass().getDeclaredField('statement');field.setAccessible(true);statement1 = (PreparedStatement) field.get(handler); }}System.out.println('================================= execute sql ==============================');System.out.println(statement1.toString());System.out.println('================================= execute sql ==============================');return invocation.proceed(); } @Override public Object plugin(Object target) {return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { }}

步驟二、在mybatis配置文件中進(jìn)行攔截器的注冊(cè):

<plugins><plugin interceptor='com.huwc.interceptor.MybatisLogInterceptor'></plugin> </plugins>

步驟三、測(cè)試結(jié)果:

==> Preparing: select * from hwc_users a where a.name = ? and a.age = ? ================================= execute sql ==============================com.mysql.jdbc.JDBC42PreparedStatement@53fb3dab: select * from hwc_users a where a.name = ** NOT SPECIFIED ** and a.age = ** NOT SPECIFIED **================================= execute sql ================================> Parameters: huwenchao(String), 35(Integer)

結(jié)果我們發(fā)現(xiàn)語(yǔ)句打印的有問(wèn)題,綁定的參數(shù)沒(méi)有打印出來(lái)。仔細(xì)一看,發(fā)現(xiàn)我們攔截的就是ParameterHandler的綁定參數(shù)方法,且是在方法執(zhí)行之前進(jìn)行的打印,顯然,參數(shù)還未綁定,所以我們調(diào)整一下攔截方法的執(zhí)行過(guò)程:

手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路

重新執(zhí)行,結(jié)果正常:

手寫mybatis完整sql插件問(wèn)題及實(shí)現(xiàn)思路

以上就是手寫mybatis完整sql插件的詳細(xì)內(nèi)容,更多關(guān)于mybatis完整sql插件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久伊人| 亚洲视频www| 国产日韩视频在线| 国产乱码精品一区二区三区亚洲人| 国产欧美日韩综合一区在线播放| 国产精品亲子伦av一区二区三区 | 国产成人精选| 中文字幕人成乱码在线观看 | 91综合网人人| 国产精品99一区二区| 免费日韩精品中文字幕视频在线| 综合激情视频| 国产极品久久久久久久久波多结野| 精品欧美视频| 欧美成人精品| 久久福利精品| 国产精品久久久亚洲一区| 日韩av在线播放网址| 欧美日韩一二| 亚洲精品三级| 国产成人精选| 欧美午夜不卡| 国产精品亚洲欧美一级在线| 国产精品国产三级国产在线观看| 99精品美女| 日韩三级精品| 视频在线不卡免费观看| 欧美日韩在线网站| 蜜臀久久99精品久久久画质超高清| 国产亚洲欧美日韩精品一区二区三区 | 国产精品videossex久久发布| 欧美丰满日韩| 香蕉久久精品| 日韩专区视频网站| 日本久久成人网| 午夜亚洲福利| 日韩一区二区三区免费播放| 日韩一区精品视频| 精品成av人一区二区三区 | 日韩理论片av| 日本va欧美va欧美va精品| 亚洲黄色网址| 奇米777国产一区国产二区| 少妇精品导航| 国产精品久久久久毛片大屁完整版 | 久久一区亚洲| 日韩精品一二三| 欧美精品日日操| 日本免费新一区视频| 欧美日中文字幕| 国产乱码精品一区二区三区亚洲人| 亚洲国产不卡| 国产精品久久久久久久久妇女| 亚洲精品黄色| 婷婷成人在线| 国产精品99在线观看| 免费看黄色91| 天堂日韩电影| 九九久久国产| 日韩av资源网| 久久香蕉精品| 五月婷婷六月综合| 高清在线一区| 91精品麻豆| 久久亚洲色图| 欧美日韩第一| 香蕉成人av| 久久三级毛片| 国产探花一区| 91精品福利观看| 亚洲精品伊人| 蜜臀va亚洲va欧美va天堂| 亚洲天堂av影院| 麻豆精品在线| 麻豆国产91在线播放| 97成人在线| 亚洲精品高潮| 亚洲精品大片| 丝袜美腿亚洲色图| 国产婷婷精品| 亚洲免费激情| 免费久久精品| 久久久久久久久99精品大| av资源新版天堂在线| 精品视频亚洲| 麻豆精品视频在线观看免费| 国产麻豆一区二区三区| 日韩一区精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 最新亚洲一区| 天堂成人免费av电影一区| 五月精品视频| 亚洲欧美激情诱惑| www.com.cn成人| 欧美羞羞视频| 91精品国产乱码久久久久久久| 久久99影视| 美女国产一区二区三区| 国产精品毛片aⅴ一区二区三区| 国产精品一页| 国产精品传媒麻豆hd| 久久只有精品| 欧美激情日韩| 福利欧美精品在线| 日韩成人亚洲| 久久一区二区中文字幕| 99精品综合| 在线亚洲精品| 中文字幕亚洲在线观看| 日韩在线黄色| 欧美亚洲国产日韩| 国产精品sss在线观看av| 国产精品成人**免费视频| 韩国女主播一区二区三区| 亚洲播播91| 日韩午夜高潮| 亚洲精品伊人| 国产日产精品_国产精品毛片| 国产欧美自拍一区| 成人精品久久| 国产一区日韩一区| 亚洲天堂免费| 国产免费播放一区二区| 精品久久久网| re久久精品视频| 中文字幕一区二区三区在线视频| 日韩av在线免费观看不卡| 另类欧美日韩国产在线| 日韩欧美综合| 午夜在线一区二区| 国产日产一区| 日韩精品永久网址| 欧美日韩国产在线一区| 亚洲一区中文| 国产欧美日韩在线一区二区| 樱桃视频成人在线观看| 欧美专区在线| 国产精品一区二区精品视频观看| 国产成人久久精品麻豆二区| 欧美福利一区| 91成人小视频| 色综合www| 日韩国产在线观看一区| 激情视频网站在线播放色| 国产亚洲欧洲| 久久av中文| 中国女人久久久| 日韩欧美激情| 美女福利一区二区三区| 免费人成在线不卡| 国产一区二区精品久| 国产视频亚洲| 国产精品13p| 日韩精品成人| 蜜臀91精品国产高清在线观看| 日韩国产在线不卡视频| 久久久国产亚洲精品| 国产欧美69| 一区二区自拍| 给我免费播放日韩视频| 日韩欧美久久| 九色精品91| 国产精品久久亚洲不卡| 久久xxxx精品视频| 亚洲www啪成人一区二区| 欧美日韩一区二区三区在线电影| 欧美一级精品| 国产精品3区| 自拍自偷一区二区三区| 日本不卡视频一二三区| 91精品福利| **爰片久久毛片| 激情综合在线| 国产日产一区| 一区二区三区四区精品视频| 国产美女高潮在线| 欧美日韩中出| 久久国产主播| 久久精品天堂| 亚洲精品第一| 午夜久久美女| 亚洲伦乱视频| 欧美成人精品一级| 日韩中文欧美在线| 亚洲天堂久久| 日本午夜大片a在线观看| 青青草国产成人99久久| 欧美中文日韩| 欧美中文一区二区| 精品国产不卡一区二区| 欧美一级二区| 亚洲精品日本| 91精品二区| 久久久精品午夜少妇| 韩国女主播一区二区三区| 欧美精品国产| 日韩福利视频一区| 日韩一区二区三区在线看| 久久av一区二区三区| 在线一区电影|