Hibernate_拦截器与日志文件

自定义拦截器要实现Interceptor接口,拦截器也是用观察者模式来设计的,重写Interceptor里面的方法,在特定条件下,这些方法就会被调用。

在Interceptor对象的方法中不能直接使用Session对象执行持久化操作,如果需要在拦截的同时使用Session对象完成持久化,可以使用Hibernate中事件监听.

下面举例拦截器,将数据的增,删,改信息保存到日志文件中,其中要用到log4j.

编写自定义拦截器LogInterceptor.java:

 1 public class LogInterceptor extends EmptyInterceptor {
 2     //对LogInterceptor这个类的日志进行处理
 3     private Logger logger = Logger.getLogger(LogInterceptor.class);
 4     
 5     @Override
 6     public boolean onSave(Object entity, Serializable id, Object[] state,
 7             String[] propertyNames, Type[] types) {
 8         logger.info("保存数据");
 9         //如果修改了持久化对象的状态,返回true;否则返回false
10         return false;
11     }
12     
13     @Override
14     public void onDelete(Object entity, Serializable id, Object[] state,
15             String[] propertyNames, Type[] types) {
16         logger.info("删除数据");
17     }
18     
19     @Override
20     public boolean onFlushDirty(Object entity, Serializable id,
21             Object[] currentState, Object[] previousState,
22             String[] propertyNames, Type[] types) {
23         logger.info("修改数据");
24         //如果修改了持久化对象的状态,返回true;否则返回false
25         return false;
26     }
27 }

 拦截器的加载可以在解析配置文件之前进行加载,也可以在打开Session的时候进行加载:

在解析配置文件配置文件之前加载:

 1 static {
 2         Configuration cfg = null;
 3         // 解析配置文件
 4         try {
 5             cfg = new Configuration();
 6             //在解析配置文件时加载过滤器
 7             cfg.setInterceptor(new LogInterceptor());
 8             cfg.configure();
 9         }
10         catch (Exception e) {
11             e.printStackTrace();
12         }
13         factory = cfg.buildSessionFactory();
14     }

在打开Session的时候进行加载:

1      Configuration cfg = new Configuration();
2         cfg.configure();
3         SessionFactory factory = cfg.buildSessionFactory();
4         Session session = factory.openSession(new LogInterceptor());
5         Transaction ts = session.beginTransaction();

 注意:在打开Session的时候进行拦截器加载,这个拦截器只在当前session中有效.

 

配置log4j.properties:

log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%c] %m%n
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss}][%c] %m%n
log4j.appender.appender2.File=HongtenLog4j.log

 

请参考:Log4j使用总结一文。

 

一颗平常心,踏踏实实,平静对待一切
原文地址:https://www.cnblogs.com/hanyuan/p/2664407.html