Hibernate ReturningWork生成的SQL无法打印,该如何配置?
如何打印Hibernate ReturningWork执行的SQL语句
由于ReturningWork直接使用底层JDBC连接执行SQL,并未经过Hibernate的SQL拦截逻辑,因此仅配置org.hibernate.SQL为INFO无法捕获这些SQL。你可以通过以下两种方式实现日志打印:
方式一:启用JDBC驱动的日志
不同数据库驱动对应不同的日志包,配置DEBUG级别即可打印所有JDBC操作:
- MySQL:
在Spring Boot的application.properties中添加:
(旧版驱动用logging.level.com.mysql.cj.jdbc=DEBUGcom.mysql.jdbc) - PostgreSQL:
这种方式会输出驱动层面的所有细节,包括SQL语句、参数绑定、连接状态等。logging.level.org.postgresql=DEBUG
方式二:使用数据源代理(更简洁可控)
通过datasource-proxy代理数据源,统一拦截所有JDBC操作,包括ReturningWork中的SQL:
- 添加Maven依赖:
<dependency> <groupId>net.ttddyy</groupId> <artifactId>datasource-proxy</artifactId> <version>1.7</version> </dependency> - 创建数据源代理配置类:
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class DataSourceProxyConfig { @Bean public DataSource dataSource(DataSource originalDataSource) { return ProxyDataSourceBuilder .create(originalDataSource) .logQueryBySlf4j() .build(); } } - 配置日志级别:
这样就能干净地输出所有执行的SQL语句,不会包含过多冗余信息。logging.level.net.ttddyy.dsproxy=INFO
内容的提问来源于stack exchange,提问作者Usha
相关产品推荐
相关产品推荐

