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语句,需要靠其它方案实现,这里附录一下。

传送门:

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

经验分享 程序员 微信小程序 职场和发展