当前位置: 首页 > news >正文

springboot单独在指定地方输出sql

一般线上项目都是将日志进行关闭,因为mybatis日志打印,时间长了,会占用大量的内存,如果我想在我指定的地方进行打印sql情况,怎么玩呢!
下面这个场景:
某天线上的项目出bug了,日志打印出来是更新成功的,但是数据库的数据却没有更新,这时候我想给执行这条sql打印出来,方便查看,但是一旦开启mybatis的日志打印功能,就回去全局打印所有的日志,我只想在我想打印的地方打印sql,这时候怎么办呢!见下面的列子:
我想在下面红色箭头处打印这句sql在这里插入图片描述
这时候怎么做呢,咱们可以这样,先将SqlSessionFactory对象注入进来,
如下图:

private final SqlSessionFactory sqlSessionFactory;@Autowiredpublic LoginService(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}

在这里插入图片描述
然后在需要打印的地方加上下面的代码即可:

// 获取执行的SQL语句并打印try (SqlSession sqlSession = sqlSessionFactory.openSession()) {Configuration sqlSessionConfiguration = sqlSession.getConfiguration();BoundSql boundSql = sqlSessionConfiguration.getMappedStatement("com.green.testlocalhost.mapper.AdminUserMapper.selectOneByExample").getSqlSource().getBoundSql(userExample);String sql = StringUtils.getExecSql(sqlSessionConfiguration, boundSql);System.out.println("本次执行的sql语句::" + sql);}

在这里插入图片描述
注意:com.green.testlocalhost.mapper.AdminUserMapper.selectOneByExample 这个是StatementId,也就是你主动调用db框架的那个类或者接口的包路径(com.green.testlocalhost.mapper.AdminUserMapper),然后在路径后面拼接调用的方法(selectOneByExample )即可

用到的工具方法如下:

/*** 获取执行的sql语句* @param configuration* @param boundSql* @return*/public static String getExecSql(Configuration configuration, BoundSql boundSql) {try {Object parameterObject = boundSql.getParameterObject();List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();String sql = boundSql.getSql().replaceAll("[\\s]+", " ");if (!parameterMappings.isEmpty() && parameterObject != null) {TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {sql = sql.replaceFirst("\\?", getParameterValue(parameterObject));} else {MetaObject metaObject = configuration.newMetaObject(parameterObject);for (ParameterMapping parameterMapping : parameterMappings) {String propertyName = parameterMapping.getProperty();Object obj;if (metaObject.hasGetter(propertyName)) {obj = metaObject.getValue(propertyName);sql = sql.replaceFirst("\\?", getParameterValue(obj));} else if (boundSql.hasAdditionalParameter(propertyName)) {obj = boundSql.getAdditionalParameter(propertyName);sql = sql.replaceFirst("\\?", getParameterValue(obj));}}}}return sql;} catch (Exception var11) {return "";}}private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private static String getParameterValue(Object obj) {String value;if (obj instanceof String) {value = "'" + obj + "'";} else if (obj instanceof Date) {value = "'" + SIMPLE_DATE_FORMAT.format(obj) + "'";} else if (obj != null) {value = obj.toString();} else {value = "";}return value;}

这样就可以在你指定的代码地方打印sql而不是全局打印sql了

相关文章:

springboot单独在指定地方输出sql

一般线上项目都是将日志进行关闭&#xff0c;因为mybatis日志打印&#xff0c;时间长了&#xff0c;会占用大量的内存&#xff0c;如果我想在我指定的地方进行打印sql情况&#xff0c;怎么玩呢&#xff01; 下面这个场景&#xff1a; 某天线上的项目出bug了&#xff0c;日志打印…...

gpio内部结构(一)

一&#xff0c;GPIO内部结构 1&#xff0c;保护二极管 * 引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入。 * 当引脚电压高于 VDD_FT 或 VDD 时&#xff0c;上方的二极管导通吸收这个高电压。 * 当引脚电压低于 VSS 时&#xff0c;下方的二极管导通&…...

【C++14保姆级教程】变量模板,Labmda泛型

文章目录 前言一、变量模板&#xff08;Variable Templates&#xff09;1.1 变量模板是什么1.2 泛型大概使用1.3 示例代码11.4 示例代码21.5 示例代码3 二、Lambda泛型&#xff08;Lambda Generics&#xff09;2.1 Lambda表达式泛型是什么&#xff1f;2.2 函数原型怎么写&#…...

LLM - 旋转位置编码 RoPE 代码详解

目录 一.引言 二.RoPE 理论 1.RoPE 矩阵形式 2.RoPE 图例形式 3.RoPE 实践分析 三.RoPE 代码分析 1.源码获取 2.源码分析 3.rotary_emb 3.1 __init__ 3.2 forward 4.apply_rotary_pos_emb 4.1 rotate_half 4.2 apply_rotary_pos_emb 四.RoPE 代码实现 1.Q/K/V …...

Vue之VueX知识探索(一起了解关于VueX的新世界)

目录 前言 一、VueX简介 1. 什么是VueX 2. VueX的作用及重要性 3. VueX的应用场景 二、VueX的使用准备工作 1. 下载安装VueX 2. vuex获取值以及改变值 2.1 创建所需示例 2.2 将创建好的.vue文件页面显示 2.3 创建VueX的相关文件 2.4 配置VueX四个js文件 2.5 加载到vue示…...

提升吃鸡战斗力,分享顶级作战干货!

大家好&#xff01;作为一名吃鸡玩家&#xff0c;你是否也希望提高自己的游戏战斗力&#xff1f;在这里&#xff0c;我将为大家分享一些顶级游戏作战干货&#xff0c;以及方便吃鸡作图和查询装备皮肤库存的实用工具。 首先&#xff0c;让我们提到绝地求生作图工具推荐。通过使用…...

【rust】cargo的概念和使用方法

啥是cargo 包管理器 cargo 提供了一系列的工具&#xff0c;从项目的建立、构建到测试、运行直至部署&#xff0c;为 Rust 项目的管理提供尽可能完整的手段&#xff0c;与 Rust 语言及其编译器 rustc 紧密结合。 创建项目 使用cargo创建一个项目&#xff1a; $ cargo new wo…...

MySQL数据库——SQL优化(2)-order by 优化、group by 优化

目录 order by 优化 概述 测试 优化原则 group by 优化 测试 优化原则 order by 优化 概述 MySQL的排序&#xff0c;有两种方式&#xff1a; Using filesort : 通过表的索引或全表扫描&#xff0c;读取满足条件的数据行&#xff0c;然后在排序缓冲区sortbuffer中完成排…...

C++DAY43

#include <iostream>using namespace std;//封装 沙发 类 class Sofa { private:string living; public:Sofa(){cout << "沙发的无参构造函数" << endl;}Sofa(string l):living(l){cout << "沙发的有参构造函数" << endl;}v…...

大模型的超级“外脑”——向量数据库解决大模型的三大挑战

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…...

opencv读取摄像头并读取时间戳

下面这行代码是获取摄像头每帧的时间戳&#xff1a; double timestamp cap.get(cv::CAP_PROP_POS_MSEC); 改变帧率的方法是&#xff1a; cap.set(cv::CAP_PROP_FPS, 30); //帧率改为30 但是实际测试时发现帧率并未被改变&#xff0c;这个可能和VideoCapture cap(cv::CAP_V…...

WebRTC 系列(四、多人通话,H5、Android、iOS)

WebRTC 系列&#xff08;三、点对点通话&#xff0c;H5、Android、iOS&#xff09; 上一篇博客中&#xff0c;我们已经实现了点对点通话&#xff0c;即一对一通话&#xff0c;这一次就接着实现多人通话。多人通话的实现方式呢也有好几种方案&#xff0c;这里我简单介绍两种方案…...

uniapp 点击 富文本元素 图片 可以预览(非nvue)

我使用的是uniapp 官方推荐的组件 rich-text&#xff0c;一般我能用官方级用官方&#xff0c;更有保障一些。 一、整体逻辑 1. 定义一段html标签字符串&#xff0c;里面包含图片 2. 将字符串放入rich-text组件中&#xff0c;绑定点击事件itemclick 3. 通过点击事件获取到图片ur…...

【2023年11月第四版教材】第24章《法律法规与标准规范》(合集篇)

第24章《法律法规与标准规范》(合集篇&#xff09; 1 民法典&#xff08;合同编&#xff09;2 招标投标法2.1 关于时间的总结2.2 内容 3 政府采购法4 专利法5 著作权法6 商标法7 网络安全法8 数据安全法 1 民法典&#xff08;合同编&#xff09; 1、要约是希望和他人订立合同的…...

提升战斗力!吃鸡行家分享顶级游戏干货,助你轻松拿下绝地求生

作为吃鸡行家&#xff0c;我们都知道&#xff0c;在绝地求生中提高战斗力至关重要。今天我来分享一些独特的干货&#xff0c;帮助你成为顶级的吃鸡玩家&#xff0c;并分享一些方便吃鸡作图、装备皮肤库存展示和查询的技巧。 首先&#xff0c;让我们来谈谈绝地求生作图工具推荐。…...

C语言练习百题之宏#define命令

宏&#xff08;Macro&#xff09;是C语言中的一种预处理指令&#xff0c;它使用#define命令定义符号常量、宏函数和代码片段。下面列举了各种宏的应用场景以及相关注意事项&#xff1a; 定义常量&#xff1a; #define PI 3.14159265注意事项&#xff1a;使用宏定义常量可以提高…...

阿里云存储I/O性能、IOPS和吞吐量是什么意思?

云盘的存储I/O性能是什么&#xff1f;存储I/O性能又称存储读写性能&#xff0c;指不同阿里云服务器ECS实例规格挂载云盘时&#xff0c;可以达到的性能表现&#xff0c;包括IOPS和吞吐量。阿里云百科网aliyunbaike.com分享阿里云服务器云盘&#xff08;系统盘或数据盘&#xff0…...

Linux知识点 -- 网络基础 -- 数据链路层

Linux知识点 – 网络基础 – 数据链路层 文章目录 Linux知识点 -- 网络基础 -- 数据链路层一、数据链路层1.以太网2.以太网帧格式3.重谈局域网原理4.MAC地址5.MTU6.查看硬件地址和MTU的命令7.ARP协议 二、其他重要协议或技术1.DNS&#xff08;Domain Name System&#xff09;2.…...

git服务器宕机后,怎么用本地仓库重新建立gitlab服务器(包括所有历史版本)

一、重新建立 当您的 GitLab 服务器因为某种原因宕机后&#xff0c;您可以使用本地仓库中的备份数据来恢复 GitLab 服务器。以下是一般的步骤&#xff0c;用于重新建立 GitLab 服务器&#xff1a; 注意&#xff1a; 这些步骤假定您已经定期备份了 GitLab 数据&#xff0c;包括…...

华为云云耀云服务器L实例评测 | 实例使用教学之综合导览

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之综合导览 实例使用教学实例场景体验实例性能评测实例评测使用介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…...

构网型变换器:从虚拟同步机到多场景应用的控制策略演进

1. 构网型变换器&#xff1a;电力系统的"新心脏" 想象一下&#xff0c;你正在玩一个多人协作的积木搭建游戏。传统玩法是大家跟着一个主建筑师&#xff08;电网&#xff09;的指令堆叠积木&#xff08;发电&#xff09;&#xff0c;而构网型变换器&#xff08;GFM&am…...

STM32看门狗库设计与FreeRTOS工程实践

1. STM32看门狗&#xff08;Watchdog&#xff09;库深度解析与工程实践1.1 看门狗在嵌入式系统中的核心价值在工业控制、医疗设备、汽车电子等对可靠性要求极高的嵌入式场景中&#xff0c;软件死锁、硬件异常、电磁干扰导致的程序跑飞是必须应对的关键风险。STM32微控制器内置的…...

24小时稳定运行方案:OpenClaw+Qwen3-32B进程守护配置

24小时稳定运行方案&#xff1a;OpenClawQwen3-32B进程守护配置 1. 为什么需要进程守护&#xff1f; 去年12月&#xff0c;我尝试用OpenClaw自动化处理每日技术简报时&#xff0c;遭遇了一个尴尬场景——凌晨3点任务突然中断&#xff0c;导致次日早晨的会议材料缺失关键数据。…...

Linux桌面/usr/share详解

/usr/share 是 Linux 桌面系统中一个极其核心的目录&#xff0c;遵循 FHS&#xff08;文件系统层次结构标准&#xff09;。它的核心定位是&#xff1a;存储架构无关的、只读的、应用程序之间共享的数据。简单理解&#xff1a;如果把系统比作一家公司&#xff0c;/usr/share 就是…...

【GitLab npm Registry 非标准端口安装问题解决方案】

GitLab npm Registry 非标准端口安装问题解决方案 问题类型: npm/pnpm 客户端与 GitLab npm Registry 集成 影响范围: 使用非标准端口的 GitLab npm Registry 解决时间: 2026-04-03 文档版本: v1.0 一、问题背景 1.1 业务场景 团队需要将内部组件库发布到私有 npm registry,选…...

DAY4--SQL限制返回行数查询

SQL基础入门&#xff1a;电商用户数据限制返回行数查询实操 这一章能解决什么电商工作问题&#xff1f; 这一章要学的LIMIT&#xff0c;是我认为电商数据分析新人最应该刻进肌肉记忆的语法。因为它直接关系到两件事&#xff1a;你的工作效率&#xff0c;以及你的职场安全。 我先…...

好写作AI“期刊论文魔法工坊”:打造学术发表的秘密武器

在学术的浩瀚星空中&#xff0c;期刊论文宛如璀璨星辰&#xff0c;是研究者展示智慧结晶、推动学科发展的重要途径。然而&#xff0c;撰写一篇高质量且符合期刊要求的论文&#xff0c;却如同在荆棘丛中开辟道路&#xff0c;充满了挑战与艰辛。别担心&#xff0c;好写作AI宛如一…...

零欧姆电阻特性与应用全解析

1. 零欧姆电阻的本质与特性零欧姆电阻&#xff0c;这个看似矛盾的名字在电子工程领域却有着广泛的应用。作为一名硬件工程师&#xff0c;我在多年的电路设计实践中发现&#xff0c;这个小元件远比表面看起来要复杂得多。1.1 零欧姆电阻的真实特性零欧姆电阻并非真正的零阻值&am…...

openclaw连接飞书操作表格

01意义 将智能助手从电脑网页端连接到手机飞书&#xff0c;从此无需守在电脑前&#xff0c;用手机就能随时指挥它干活。未来&#xff0c;飞书中需要手动操作的任务&#xff0c;都可以交由 AI 智能助手来完成。它还能帮你构建企业知识库&#xff0c;随着飞书终端 CLI 能力的增强…...

基于深度学习的水下海洋生物识别(YOLOv12/v11/v8/v5模型+数据集)(源码+lw+部署文档+讲解等)

摘要随着全球海洋生态环境的变化&#xff0c;水下海洋生物的监测与识别变得日益重要。基于深度学习的水下生物识别技术&#xff0c;尤其是YOLO&#xff08;You Only Look Once&#xff09;系列目标检测模型&#xff0c;因其高效性和准确性而受到广泛关注。本文提出了一种基于YO…...