博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate_拦截器与日志文件
阅读量:4504 次
发布时间:2019-06-08

本文共 2513 字,大约阅读时间需要 8 分钟。

自定义拦截器要实现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;否则返回false10         return false;11     }12     13     @Override14     public void onDelete(Object entity, Serializable id, Object[] state,15             String[] propertyNames, Type[] types) {16         logger.info("删除数据");17     }18     19     @Override20     public boolean onFlushDirty(Object entity, Serializable id,21             Object[] currentState, Object[] previousState,22             String[] propertyNames, Type[] types) {23         logger.info("修改数据");24         //如果修改了持久化对象的状态,返回true;否则返回false25         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

 

请参考:一文。

 

转载于:https://www.cnblogs.com/hanyuan/archive/2012/08/30/2664407.html

你可能感兴趣的文章
Softmax函数
查看>>
.NET 向SQL里写入非Text类型
查看>>
HAOI2006 受欢迎的牛
查看>>
【代码备份】pocs.m
查看>>
(转)ApplicationDomain
查看>>
form注册表单圆角 demo
查看>>
python 学习之 函数参数和内置函数
查看>>
leetcode 1108
查看>>
PHP底层的运行机制与原理
查看>>
ERP笔记3-数据库的版本化
查看>>
绑定元素属性改变不通知界面
查看>>
C#中使用反射获取结构体实例
查看>>
Spring bean的作用域和生命周期
查看>>
ado.net增删改查练习
查看>>
恩格尔系数
查看>>
纪检委,检察院的工资
查看>>
20135213 20135231 信息安全系统设计基础课程第一次实验报告
查看>>
BZOJ1419——Red is good(期望dp)
查看>>
Linux系统扩容根目录磁盘空间
查看>>
Java架构师书单
查看>>