电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

手寫mybatis完整sql插件問題及實現思路

瀏覽:60日期:2023-10-19 11:47:26
問題產生

我們在使用mybatis的過程中,如果開啟了mysql的日志功能的話,會在控制臺打印一些sql的信息,但是日志中的sql語句,是沒有拼接參數的,也就是說,是不可以直接放到數據庫中執行的。some times,我們在調試問題的時候,會希望有一個直接可以運行的SQL語句,那將方便很多,特別是在sql語句綁定參數很多的時候。

現象描述

默認的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解決思路

通過思考,我覺得可以通過mybatis的插件機制來解決這個問題。首先,我們查看源碼,發現mysql的PreparedStatement的toString方法中,直接通過asSql方法展示了完整的sql語句:

手寫mybatis完整sql插件問題及實現思路

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

手寫mybatis完整sql插件問題及實現思路手寫mybatis完整sql插件問題及實現思路

具體實現

我們隨機選擇攔截ParameterHandler來進行完整sql語句的輸出:

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

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配置文件中進行攔截器的注冊:

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

步驟三、測試結果:

==> 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)

結果我們發現語句打印的有問題,綁定的參數沒有打印出來。仔細一看,發現我們攔截的就是ParameterHandler的綁定參數方法,且是在方法執行之前進行的打印,顯然,參數還未綁定,所以我們調整一下攔截方法的執行過程:

手寫mybatis完整sql插件問題及實現思路

重新執行,結果正常:

手寫mybatis完整sql插件問題及實現思路

以上就是手寫mybatis完整sql插件的詳細內容,更多關于mybatis完整sql插件的資料請關注好吧啦網其它相關文章!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 南京欧陆电气股份有限公司-风力发电机官网| Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 浙江美尔凯特智能厨卫股份有限公司| 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 粘度计,数显粘度计,指针旋转粘度计| 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 小型数控车床-数控车床厂家-双头数控车床 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 航空铝型材,7系铝型材挤压,硬质阳*氧化-余润铝制品 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 |