[Hibernate] Hibernate配制项之hibernate.show

xiaoxiao2021-02-28  35

Hibernate配制项之hibernate.show_sql, hibernate.show_sql和hibernate.use_sql_comments

前言

在本地开发时,我们经常有查看执行的SQL语句的需求。 本次介绍输出和统计SQL语句相关的三个配制项。

本文测试使用的实体如下:

@Entity public class Event { @Id @GeneratedValue @Column(name = "EVENT_ID") private Long id; private String title; @Column(name = "EVENT_DATE") private Date date; private int version; }

show_sql(输出sql)

在hiberante.cfg.xml中把show_sql配制为true如下

<hibernate-configuration> <session-factory> <!--省略了其它配制项 --> <property name="show_sql">true</property> </session-factory> </hibernate-configuration>

在保存Event时,

Session session = sessionFactory.openSession(); session.getTransaction().begin(); Event event = new Event(); event.setDate(new Date()); event.setTitle("event title"); session.save(event); session.getTransaction().commit();

在控制台会输出如下sql

Hibernate: insert into Event (EVENT_DATE, title, version, EVENT_ID) values (?, ?, ?, ?)

format_sql(将输出的sql格式化)

将show_sql配制为true,输出的sql无论多长都只会在一行显示。我们可以将format_sql配制为true,这样Hibernate会先将sql格式化,然后再输出,方便了我们调试。 hiberante.cfg.xml配制如下

<hibernate-configuration> <session-factory> <!--省略了其它配制项 --> <property name="show_sql">true</property> <property name="format_sql">true</property> </session-factory> </hibernate-configuration>

在保存Event时,

Session session = sessionFactory.openSession(); session.getTransaction().begin(); Event event = new Event(); event.setDate(new Date()); event.setTitle("event title"); session.save(event); session.getTransaction().commit();

在控制台会输出如下sql

Hibernate: insert into Event (EVENT_DATE, title, version, EVENT_ID) values (?, ?, ?, ?)

use_sql_comments(生成SQL注释)

将use_sql_comments配制为true,Hibernate会为我们生成SQL的注释,更加的方便了我们调试 hiberante.cfg.xml配制如下

<hibernate-configuration> <session-factory> <!--省略了其它配制项 --> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hibernate.use_sql_comments">true</property> </session-factory> </hibernate-configuration>

情景一 在保存Event时,

Session session = sessionFactory.openSession(); session.getTransaction().begin(); Event event = new Event(); event.setDate(new Date()); event.setTitle("event title"); session.save(event); session.getTransaction().commit();

在控制台会输出如下sql

Hibernate: /* insert com.jianglei.entity.Event */ insert into Event (EVENT_DATE, title, version, EVENT_ID) values (?, ?, ?, ?)

情景二 在执行查询时

Session session = sessionFactory.openSession(); List<Event> events = session.createQuery("select e from Event e", Event.class) .getResultList();

在控制台会输出如下sql

Hibernate: /* select e from Event e */ select event0_.EVENT_ID as EVENT_ID1_0_, event0_.EVENT_DATE as EVENT_DA2_0_, event0_.title as title3_0_, event0_.version as version4_0_ from Event event0_

总结

在本地开发时,我一般把这三个选项都设置为true,方便开发和调试

<hibernate-configuration> <session-factory> <!--省略了其它配制项 --> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hibernate.use_sql_comments">true</property> </session-factory> </hibernate-configuration>

而在线上,一般将这三个选项设置为false(默认),减少不必要的输出和资源消耗

转载请注明原文地址: https://www.6miu.com/read-2614133.html

最新回复(0)