在 MyBatis 中实现控制台输出 SQL 参数
在 MyBatis 中实现控制台输出 SQL 参数,可通过以下方案实现:
# 一、使用 MyBatis-Plus 的 SqlLogInterceptor(推荐)
适用场景:项目已集成 MyBatis-Plus(3.5.3+版本)
配置步骤:
1、添加拦截器:
@Configuration
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new SqlLogInterceptor());return interceptor;}
}
2、配置日志输出(application.yml):
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
此方案可直接输出完整 SQL(参数替换为真实值)。
二、通过 log4jdbc 工具输出完整 SQL
适用场景:需独立查看带参数的 SQL,不依赖 MyBatis-Plus
步骤:
1、添加依赖:
<dependency><groupId>org.bgee.log4jdbc-log4j2</groupId><artifactId>log4jdbc-log4j2-jdbc4.1</artifactId><version>1.16</version>
</dependency>
2、修改 JDBC 驱动配置:
# 原 JDBC URL 前追加 "jdbc:log4jdbc:"
spring:datasource:url: jdbc:log4jdbc:mysql://localhost:3306/dbnamedriver-class-name: net.sf.log4jdbc.DriverSpy
3、配置日志级别(logback.xml):
<logger name="jdbc.sqlonly" level="DEBUG"/> <!-- 仅输出 SQL -->
<logger name="jdbc.sqltiming" level="INFO"/> <!-- 输出 SQL 及执行时间 -->
此工具支持参数替换及 SQL 格式化。
三、自定义拦截器输出参数(原始 MyBatis)
适用场景:需定制化输出格式
实现步骤:
1、创建拦截器类:
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class SqlParamInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {Object parameter = invocation.getArgs()[1];// 解析参数并拼接 SQLSystem.out.println("Params: " + parameter);return invocation.proceed();}
}
2、注册拦截器(mybatis-config.xml):
<plugins><plugin interceptor="com.example.interceptor.SqlParamInterceptor"/>
</plugins>
此方式需自行解析参数绑定逻辑,灵活性高但实现复杂。
四、注意事项
1、性能影响
输出完整 SQL 会增加日志量,生产环境建议关闭 DEBUG 级别日志。
2、参数敏感信息
若 SQL 含敏感参数(如密码),需过滤或脱敏处理。
3、IDE 工具支持
IDEA 可通过安装插件(如 MyBatis Log Plugin)直接查看参数替换后的 SQL。
相关文章:
在 MyBatis 中实现控制台输出 SQL 参数
在 MyBatis 中实现控制台输出 SQL 参数,可通过以下方案实现: # 一、使用 MyBatis-Plus 的 SqlLogInterceptor(推荐) 适用场景:项目已集成 MyBatis-Plus(3.5.3版本) 配置步骤ÿ…...

深入解析网络联通性检测:ping 与 tracert 的原理、用法及实战应用
深入解析网络联通性检测:ping 与 tracert 的原理、用法及实战应用 在网络世界中,确保设备之间的联通性是一切网络服务正常运行的基础。无论是网络工程师排查故障,还是普通用户检查网络连接,ping和tracert(在 Windows …...

LeetCode:101、对称二叉树
递归法: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {…...

从生产事故看软件质量保障:开发规范落实与时间资源矛盾的深度探讨
“穷则变,变则通,通则久。” —— 《周易系辞下》。在困境中要勇于变革,正如软件团队在遇到生产事故后,需要改变现有的开发方式和流程,以适应新的挑战。 在项目推进过程中,一场生产事故如晴天霹雳般袭来&am…...
Redis 常见数据类型
Redis 常见数据类型 一、基本全局命令详解与实操 1. KEYS 命令 功能:按模式匹配返回所有符合条件的键(生产环境慎用,可能导致阻塞)。 语法: KEYS pattern 模式规则: h?llo:匹配 hello, ha…...
TextRNN 模型实现微博文本情感分类
在自然语言处理(NLP)领域,文本情感分类是一项极具应用价值的任务。它能帮助企业分析用户反馈、社交媒体舆情监测等。本文将通过一段实际代码,带大家了解如何利用 PyTorch 框架和 TextRNN 模型,完成微博文本的情感分类工…...

SAP note 3565626 : Baltimore CyberTrust 根证书即将过期
SAP note 3565626 : Baltimore CyberTrust 根证书即将过期 20250512 2025年5月9日 症状 您已收到来⾃ SAP Integration Suite/Cloud Integration 服务的通知邮件, 建议 Baltimore CyberTrust 根证书将于 2025 年 5 ⽉ 12 ⽇ 过期,其中 Balt…...

4.3 Thymeleaf案例演示:图书管理
本项目通过整合 Thymeleaf 实现了一个简单的图书管理系统。系统功能包括查询所有图书、按条件查询图书、根据用户角色显示按钮以及借阅图书。通过 Spring Boot 框架搭建项目,创建了用户和图书的实体类,以及图书的数据访问类和控制器。在 Thymeleaf 模板中…...

STM32GPIO输入实战-key按键easy_button库移植
STM32GPIO输入实战-key按键easy_button库移植 一,ebtn介绍二,ebtn移植三,组件库的思想组成1. 事件驱动 (Event-Driven) 🛎️ —— 像按门铃2. 状态机 (State Machine) 🚦 —— 像红绿灯3. 回调函数 (Callback Function…...

【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 递归、搜索和回溯递归搜索VS 深度优先遍历 VS 深度优先搜索 VS 宽度优先遍历 VS 宽度优先搜索 VS 暴搜回溯与剪枝 1 面试题 08.06. 汉诺塔问题1.1 分析…...

JDK8 HashMap红黑树退化为链表的机制解析
目录 1、数据结构: 2、Fail-Fast机制 2.1、核心作用 2.2、实现原理 2.3、触发场景 2.4、实现细节 2.5、对比 2.6、注意事项 3、核心结论 4、转化安全机制 4.1. 触发场景 4.2. 转换过程 4.3. 并发安全机制 5、设计原因 5.1. 性能权衡 5.2. 空间局部性…...

【基础】模型上下文协议(Model Context Protocol, MCP)根本原理与工作机制详解
一、MCP的根本原理 模型上下文协议(MCP)是一种标准化接口协议,旨在解决AI系统(尤其是大型语言模型,LLM)与外部工具、数据源之间的交互碎片化问题。其核心原理可以概括为以下三点: 统一接口抽象…...

霸王茶姬微信小程序自动化签到系统完整实现解析
霸王茶姬微信小程序自动化签到系统完整实现解析 技术栈:Node.js 微信小程序API MD5动态签名 一、脚本全景架构 功能模块图 #mermaid-svg-0vx5W2xo0IZWn6mH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...
北斗导航 | RTKLib中重难点技术,公式,代码
Rtklib 一、抗差自适应卡尔曼滤波1. **核心难点**2. **公式与代码实现**二、模糊度固定与LAMBDA算法1. **核心难点**2. **LAMBDA算法实现**3. **部分模糊度固定技术**三、伪距单点定位与误差修正1. **多系统多频点修正**2. **接收机钟差与系统间偏差**四、动态模型与周跳处理1.…...

p2p虚拟服务器
ZeroTier Central ✅ 推荐工具:ZeroTier(免费、稳定、跨平台) ZeroTier 可以帮你把多台设备(无论是否跨网)加入一个虚拟局域网,彼此间可以像在同一个 LAN 中通信,UDP 视频、文件传输、SSH 等都…...
Python 爬虫基础入门教程(超详细)
一、什么是爬虫? 网络爬虫(Web Crawler),又称网页蜘蛛,是一种自动抓取互联网信息的程序。爬虫会模拟人的浏览行为,向网站发送请求,然后获取网页内容并提取有用的数据。 二、Python爬虫的基本原…...

python实现点餐系统
使用python实现点餐系统的增加菜品及价格,删除菜品,查询菜单,点菜以及会员折扣价等功能。 代码: 下面展示一些 内联代码片。 # coding utf-8menu {拍黄瓜: 6, 小炒肉: 28, 西红柿炒蛋: 18, 烤鱼: 30, 红烧肉: 38, 手撕鸡: 45,…...

(三)毛子整洁架构(Infrastructure层/DapperHelper/乐观锁)
文章目录 项目地址一、Infrastructure Layer1.1 创建Application层需要的服务1. Clock服务2. Email 服务3. 注册服务 1.2 数据库服务1. 表配置Configurations2. Respository实现3. 数据库链接Factory实现4. Dapper的DataOnly服务实现5. 所有数据库服务注册 1.3 基于RowVersion的…...

探索Stream流:高效数据处理的秘密武器
不可变集合 stream流 Stream流的使用步骤: 先得到一条Stream流(流水线),并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1:中间方法࿰…...
git高效杀器——cz-customizable 搭配 commitlint
What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作为独立工具),旨在帮助创建如约定式提交规范的一致性提交消息。commitlint commitlint 是一个用于检查 Git 提交信息的工具,它可以帮助开发者保持提交信息的规范性和一致性。…...

虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机的解决方案
1.出现的问题: 虚拟机ubantu20.04系统桥接模式下无法ping通外网,但可以ping通本机。 2.解决方案: 如果 DHCP 未分配 IP 地址,可以手动配置静态 IP: 1.编辑网络配置文件: sudo nano /etc/netplan/01-netcfg.yaml 2…...

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)
新入职的公司在某些场景下无脑使用组播技术,自己突然就意识到一个问题:单播,组播,广播,哪个更省带宽? 有所收获,做点笔记,仅仅是个人理解~ 1:简单理解 单播࿱…...

qtcreater配置opencv
我配置opencv不管是按照网上的教程还是deep seek发现都有些问题,下面是我的配置方法以及实践成功的心得 电脑环境 windows平台qt6 下载 我这里直接提供官网下载地址:https://opencv.org/releases/ 我下载的是最新版,下载后是一个.exe文件…...
详解 c++17 重载类 overload的每一条语句,附实例.
author: hjjdebug date: 2025年 05月 09日 星期五 16:21:03 CST description: 详解 c17 重载类 overload的每一条语句 文章目录 1. template 模板类.2. class... Ts 是什么意思?3. template<class... Ts> 是什么意思?4. overload 是什么?5. Ts...…...

机器学习-数据集划分和特征工程
一.数据集划分 API函数: sklearn.model_selection.train_test_split(*arrays,**options) 参数: - arrays:多个数组,可以是列表,numpy数组,也可以是dataframe数据框等 - options:&…...

MySQL C API高效编程:C语言实现数据库操作的深入解析
知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体,封装了与数据库连接相关的所有状态,配置和数据。 2、MYSQL *的本质 类似于 FILE*,代表一个与数据库连接的通道&…...

MySQL初阶:数据库约束和表的设计
数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。 数据库约束类型 1)not null 非空类型 :指定非空类型的列不能存储null,如果插入的数据是null便会报错。 2)de…...

LeetCode 解题思路 47(最长回文子串、最长公共子序列)
解题思路: dp 数组的含义: dp[i][j] 是否为回文子串。递推公式: dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化: 单字符 dp[i][i] true,双字符 dp[i][i 1] s.charAt(i) s.charA…...
左支座加工工艺与钻φ25孔专用夹具设计
1 零件结构与工艺分析 1.1 零件结构特征 本左支座为典型箱体类零件,采用HT200灰铸铁铸造毛坯。主体结构包含: 20015080mm安装基面 2φ12定位孔(公差H7) φ250.02主轴承孔(表面粗糙度Ra1.6) 4M10螺纹安…...
基于Qwen-14b的基础RAG实现及反思
1、概览 本文主要介绍RAG的基础实现过程,给初学者提供一些帮助,RAG即检索增强生成,主要是两个步骤:检索、生成,下面将基于这两部分进行介绍。 2、检索 检索的主要目的是在自定义的知识库kb中查询到与问题query相关的候…...