在本地开发时,我们经常有查看执行的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; }在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 (?, ?, ?, ?)将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配制为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(默认),减少不必要的输出和资源消耗