@MappedSuperclass public abstract class BaseAuditModel extends BaseCrmModel{ /** * UID */ private static final long serialVersionUID = 8886136517524378574L; public abstract String[][] getAuditPropertys(); //需要审计的字段名称 }
@Entity @Table(name = "crm_user") public class UserModel extends BaseAuditModel{ /** * UID */ private static final long serialVersionUID = 1L; private String userName; //用户名 private String mobile; //手机号 private String address; //住址 public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String[][] getAuditPropertys() { //需要审计的字段/解释 return new String[][]{{"userName", "用户名"}, {"mobile","手机号"}, {"address", "住址"}}; } @Override public String getModelName() { return "用户信息"; } }
public class LogEntityInterceptor extends EmptyInterceptor { /** * UID */ private static final long serialVersionUID = 1L; private Logger log = Logger.getLogger(LogEntityInterceptor.class); @Override public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { log.info("删除数据 onDelete..."); } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { log.info("保存数据 onSave..."); return false; } @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { log.info("修改数据 onFlushDirty..." + entity.getClass()); if(entity instanceof BaseAuditModel){ BaseAuditModel audit = (BaseAuditModel) entity; if(audit.getAuditPropertys() != null && previousState != null){ log.info(audit.getModelName()); log.info("id: "+audit.getId()); Map<String, String> map = MapUtils.putAll(new HashMap(), audit.getAuditPropertys()); for(int i=0, len=previousState.length; i<len; i++){ if(previousState[i]!=null && map.get(propertyNames[i]) != null && !previousState[i].equals(currentState[i])){ log.info(propertyNames[i]+"/"+map.get(propertyNames[i])+":原值="+previousState[i]+",新值="+currentState[i]); } } } } return false; } }
<!-- Hibernate审计日志拦截器 --> <bean id="logEntityInterceptor" class="com.hzwealth.app.crm.LogEntityInterceptor" /> <bean id="sessionFactory" ............. > ................ <property name="entityInterceptor" ref="logEntityInterceptor"/> ................ </bean>
相关推荐
接着,为了实现审计日志,我们需要在项目中引入Hibernate Envers的依赖。在Maven的pom.xml文件中,可以添加如下依赖: ```xml <groupId>org.hibernate <artifactId>hibernate-envers <version>5.x.y.Final...
日志jar包则是Hibernate为了实现日志记录功能而依赖的组件,这对于调试、性能监控和问题排查至关重要。 在Java开发中,日志记录是一项基础且重要的任务,它能够帮助开发者追踪程序运行状态,定位错误源,并收集运行...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...
hibernate框架日志文件,用于对hibernate框架运行记录日志的;
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...
**基于Struts 2和Hibernate的Blog实现** 在IT领域,构建一个博客系统是常见的实践项目,用于学习和展示Web开发技术。本项目利用Struts 2和Hibernate这两个流行的Java框架,实现了一个基本的博客系统。Struts 2是MVC...
【标题】:“配置 Hibernate 日志” 【描述】:在 Java 的开发环境中,Hibernate 是一个非常流行的 ORM(对象关系映射)框架,它极大地简化了数据库操作。然而,为了确保应用程序的稳定性和性能优化,理解并配置 ...
数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...
【hibernate3 最简单实现项目】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本项目基于Hibernate3,将介绍如何实现最简单的查询功能,并且提供了必要的jar包以供...
试验了很多版本,这套hibernate包算是比较理想的配套包,分别有:antlr-2.7.6.jar ,backport-util-concurrent.jar, commons-collections-3.1.jar, commons-logging-1.1.1.jar,dom4j-1.6.1.jar,ehcache-1.5.0....
综上所述,"struts2+hibernate实现登录及增删改操作"涉及到的是如何利用这两个框架构建一个完整的Java Web应用,包括用户身份验证、数据库操作以及对数据的增删改等核心功能。这个小案例可以帮助开发者理解并熟练...
此外,Struts2还支持拦截器机制,允许自定义拦截规则,实现如权限验证、日志记录等功能,增强了应用程序的可扩展性和可维护性。 接着,Hibernate作为持久层框架,它简化了Java对象与数据库之间的交互。Hibernate...
本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...
在这个“Spring-Struts2-Hibernate登录打印日志”的主题中,我们将深入探讨如何在SSH框架下实现用户登录功能,并记录相关的日志信息。 首先,让我们了解SSH框架的核心组件: 1. **Spring**:Spring框架是整个应用...
**JSP+Hibernate实现留言板详解** 在Web开发中,创建一个功能完善的留言板系统是一项常见的任务。这个系统通常涉及用户交互、数据存储以及后端逻辑处理。在这个案例中,我们使用了Java服务器页面(JSP)作为视图层...
Hibernate Many to Many 实现方式
**Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...