使用 Hibernate 时如何打印带有参数值的查询字符串

新手上路,请多包涵

是否可以在 Hibernate 中使用实际值而不是问号打印生成的 SQL 查询?

如果 Hibernate API 无法实现,您会如何建议打印具有真实值的查询?

原文由 craftsman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 928
2 个回答

您需要为以下类别启用 日志记录

  • org.hibernate.SQL - 设置为 debug 在执行时记录所有 SQL DML 语句
  • org.hibernate.type - 设置为 trace 记录所有JDBC参数

因此 log4j 配置可能如下所示:

 # logs the SQL statements
log4j.logger.org.hibernate.SQL=debug

# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace

第一个相当于 hibernate.show_sql=true legacy property ,第二个 打印绑定参数等。

另一种解决方案(非基于休眠的)是使用像 P6Spy 这样的 JDBC 代理驱动程序。

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 Spring Boot,只需配置以下内容:

application.yml

 logging:
  level:
    org.hibernate.SQL: DEBUG
    org.hibernate.type: TRACE

application.properties

 logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE

仅此而已。

您的日志将是这样的:

 2020-12-07 | DEBUG | o.h.SQL:127 - insert into Employee (id, name, title, id) values (?, ?, ?, ?)
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [1] as [VARCHAR] - [001]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [2] as [VARCHAR] - [John Smith]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:52 - binding parameter [3] as [VARCHAR] - [null]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [4] as [BIGINT] - [1]

原文由 JRichardsz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题