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

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(默认),减少不必要的输出和资源消耗

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值