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
