jpa怎么在控制台输出详细带参数的sql日志

代码:

int id = 1;
queryFactory.from(qtable_xxx).where(qtable_xxx.id.eq(id)).fetch()

例如,下面是我控制台的日志:

Hibernate: select count(longjob0_.id) as col_0_0_ from long_job longjob0_ where (longjob0_.status in (? , ?)) and longjob0_.type=?

我怎么可以得到类似这样的日志呢?

Hibernate: select * from table_xxx where id = 32

你是想在日志中输出占位符参数的话可以配置 logger :

<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>

如果你使用 Hibernat 6 (Spring Boot3),那么需要改成:

<logger name="org.hibernate.orm.jdbc.bind" level="TRACE" />

我想输出不带占位符,直接渲染参数的SQL,可以直接复制后运行的SQL

或者有没有方法可以直接获取到原生的SQL,比如类似getRawSql这样的方法,不真正执行SQL,只是返回组装好的不带占位符的SQL语句
String sql = queryFactory.from(qtable_xxx).where(qtable_xxx.id.eq(id)).getRawSql()

据我所知,没有。SQL是预编译,本身字符串就是带 “?” 占位符。你只有自己手动去替换参数再去执行。

好的 感谢

我也找过,但没有找到。你可以使用p6spy来打印日志,不过在生产环境中不建议开启。

感谢,很好用的工具 :+1: