[Hibernate] - Interceptors and events

Hibernate的拦截器,有很大作用。比如要监控SQL的执行效率等。

参考文档:

http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/events.html

 

下面是一个简单的监控Hibernate的操作SQL打印:

新建一个Java类:

package com.my.dao.util;

import org.hibernate.EmptyInterceptor;

@SuppressWarnings("serial")
public class AuditInterceptor extends EmptyInterceptor {

    @Override
    public String onPrepareStatement(String sql) {
        System.out.println(sql);
        return super.onPrepareStatement(sql);
    }
    
}

在Hibernate的Configuration中加入这句:

configuration.setInterceptor(new AuditInterceptor());

完整HibernateUtil

package com.my.dao.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            Configuration configuration = new Configuration();
            configuration.setInterceptor(new AuditInterceptor());
            return configuration.configure().buildSessionFactory(
                    new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build());
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    
}

 


 

有一个Hibernate的插件,可以用于记录Hibernate的SQL真实数据:

http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/

 

posted @ 2014-09-03 18:15  横渡  阅读(331)  评论(0编辑  收藏  举报