Hibernate打印携带参数的SQL解决方案

Mysql 查看记录执行的sql

项目上需要对执行的sql进行优化,使用的ORM框架为JPA,在配置项开启了打印语句后,拼接的参数却没法一起携带过来

spring:
  jpa:
    database: mysql
    show-sql: true
    use_sql_comments: true

后台打印输出如下
在这里插入图片描述
这种带有参数占位符的SQL不方便直接执行,需要先获取对应位置的参数然后手动替换占位符的参数,为了更好直观的看到效果,显然是输出拼接好参数的SQL 更为方便,一番搜索后,大失所望目前没有什么很优雅方便的实现,要么修改日志参数,新增jar包依赖日志打印,要么依赖第三方框架如P6spy。

为了达到即时查看执行的完整sql的目的,几番碰壁后就把目光对准了mysql本身,用mysql自带的日志记录功能来查看它刚收到的sql是什么样的,设置如下

-- 设置执行日志输出以表的形式记录
set global log_output = 'TABLE';
-- 开启执行日志记录
set global general_log = 'ON';
-- 这里是查询时间倒叙,过滤条件为博主的ip ,可换成自己的过滤条件
select *from mysql.general_log where argument like '%select%' and user_host='root[root] @  [192.168.251.29]' 
order by event_time desc;  
-- 最后查完后 不用这个功能了 记得关掉 并清除掉日志
set global general_log = 'OFF';
truncate mysql.general_log;

附带一提,如果使用的连接工具是sqlyog,是可以直接查看日志里过滤出来的blob文本的,如果是navicat 是不能直接查看的,需要对着字段点击文本才行,如下图所示,我们开启日志输出执行语句后,看到了刚才执行的拼接好参数的语句
在这里插入图片描述

而且博主这里是测试库,所以可以直接操作数据库,所以不能操作数据库的情况下想查看完整的SQL语句,需要靠其它方案实现,这里附录一下。

传送门

日志打印sql 实现https://blog.csdn.net/qq_35387940/article/details/102561244

P6spy实现
https://www.cnblogs.com/baby123/p/12610750.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值