答案:通过配置hibernate.show_sql和hibernate.format_sql属性为true,或使用日志框架如Logback、Log4j设置org.hibernate.SQL为DEBUG级别,即可在控制台查看Hibernate执行的SQL语句。

想在Hibernate里看到它执行的SQL?简单,几个小技巧就能搞定。
Hibernate打印SQL语句,其实就是配置的问题,目标是让Hibernate把生成的SQL显示出来,方便我们调试和优化。
修改Hibernate配置文件(hibernate.cfg.xml 或 persistence.xml):
这是最常见的方法。在你的Hibernate配置文件中,添加或修改以下属性:
<property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property>
hibernate.show_sql
true
hibernate.format_sql
true
true
使用日志框架:
Hibernate底层使用SLF4J作为日志门面,所以你可以通过配置SLF4J绑定的具体日志实现(比如Logback或Log4j)来控制SQL的输出。
Logback: 在
logback.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
</configuration>org.hibernate.SQL
org.hibernate.type.descriptor.sql.BasicBinder
Log4j: 在
log4j.properties
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%t] %-5p %c{1} - %m%n同样,
org.hibernate.SQL
org.hibernate.type.descriptor.sql.BasicBinder
在代码中配置:
如果你不想修改配置文件,也可以在代码中动态设置Hibernate的属性:
Configuration configuration = new Configuration();
configuration.setProperty("hibernate.show_sql", "true");
configuration.setProperty("hibernate.format_sql", "true");
// 其他配置...
SessionFactory sessionFactory = configuration.buildSessionFactory();这种方法更灵活,但每次启动应用都需要设置。
仅仅看到SQL语句是不够的,有时候我们还需要知道SQL语句中的参数是什么。这可以通过配置日志框架来实现,就像上面提到的
org.hibernate.type.descriptor.sql.BasicBinder
另外,有些IDE(比如IntelliJ IDEA)提供了插件,可以拦截Hibernate的SQL语句,并显示参数值,用起来更方便。
这通常有几个原因:
hibernate.cfg.xml
persistence.xml
Hibernate的SQL输出可能会很冗长,特别是当你的应用频繁操作数据库时。为了过滤掉不需要的SQL,你可以:
org.hibernate.SQL
总的来说,让Hibernate在控制台打印SQL语句并不难,关键是理解Hibernate的配置和日志机制。根据你的实际需求,选择合适的方法,就能轻松地监控和调试Hibernate的SQL执行情况。
以上就是hibernate 中如何在控制台查看打印的sql 语句?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号