dedecms做的网站首页被挂马,企业网站开发技术有哪些,一个完整的营销策划方案范文,视频网站做视频容易火1.概述 本文将展示如何使用Spring和Hibernate实现DAO 。 有关核心的Hibernate配置#xff0c;请参阅有关带有Spring的Hibernate 3和Hibernate 4的文章。 2.没有更多的春天模板 从Spring 3.0和Hibernate 3.0.1开始#xff0c; 不再需要Spring HibernateTemplate来管理Hib… 1.概述 本文将展示如何使用Spring和Hibernate实现DAO 。 有关核心的Hibernate配置请参阅有关带有Spring的Hibernate 3和Hibernate 4的文章。 2.没有更多的春天模板 从Spring 3.0和Hibernate 3.0.1开始 不再需要Spring HibernateTemplate来管理Hibernate Session。 现在可以使用上下文会话 - 由Hibernate直接管理并在整个事务范围内处于活动状态的会话 。 因此现在的最佳实践是直接使用Hibernate API而不是HibernateTemplate 这将有效地将DAO层实现与Spring完全脱钩。 2.1。 没有HibernateTemplate的异常翻译-活得很好 异常转换是HibernateTemplate的职责之一–将低级别的Hibernate异常转换为更高级别的通用Spring异常。 如果没有模板 该机制仍处于启用状态并积极为所有对Repository注解的DAO的。 在幕后它使用了一个Spring bean后处理器该处理器将为所有Repository bean和在Spring上下文中找到的所有PersistenceExceptionTranslator提供建议。 要记住的一件事是异常翻译是通过代理完成的。 为了使Spring能够围绕DAO类创建代理不得将它们声明为final 。 2.2。 没有模板的Hibernate会话管理 当Hibernate对上下文会话的支持问世时 HibernateTemplate本质上已经过时了。 实际上该类的javadoc已使用以下建议进行了更新原始文本为粗体 注意从Hibernate 3.0.1开始事务性Hibernate访问代码也可以采用普通的Hibernate样式进行编码。 因此对于新启动的项目请考虑采用基于{link org.hibernate.SessionFactorygetCurrentSession}的标准Hibernate3样式编码数据访问对象。 3. DAO 我们将从基本的DAO开始- 一个抽象的参数化的DAO 它支持常见的通用操作并且打算针对每个实体进行扩展 public abstract class AbstractHibernateDAO T extends Serializable {private Class T clazz;Autowiredprivate SessionFactory sessionFactory;public void setClazz( final Class T clazzToSet ){clazz clazzToSet;}public T findOne( final long id ){return (T) getCurrentSession().get( clazz, id );}public List T findAll(){return getCurrentSession().createQuery( from clazz.getName() ).list();}public void save( final T entity ){getCurrentSession().persist( entity );}public T update( final T entity ){return (T) getCurrentSession().merge( entity );}public void delete( final T entity ){getCurrentSession().delete( entity );}public void deleteById( final long id ){final T entity findOne( id);delete( entity );}protected final Session getCurrentSession(){return sessionFactory.getCurrentSession();}
} 这里有几个方面很有趣–如所讨论的抽象DAO不会扩展任何Spring模板例如HibernateTemplate 。 而是将Hibernate SessionFactory直接注入DAO中并通过它公开的上下文Session扮演主要Hibernate API的角色 this.sessionFactory。 getCurrentSession ; 另外请注意实体的Class是在构造函数中传递的以便在通用操作中使用。 现在让我们看一下Foo实体的DAO的示例实现 Repository
public class FooDAO extends AbstractHibernateDAO Foo implements IFooDAO{public FooDAO(){setClazz(Foo.class );}
}4。结论 本文介绍了基于XML和Java的配置以及Hibernate和Spring 3.1持久层的配置和实现。 讨论了不再依赖DAO层模板的原因以及配置Spring以管理事务和Hibernate Session的可能的陷阱。 最终结果是一个轻量级的干净的DAO实现几乎没有依赖Spring的编译时。 这个简单项目的实现可以在github项目中找到–这是一个基于Eclipse的项目因此应易于导入和运行。 参考来自BCG的 JCG合作伙伴 Eugen Paraschiv的Spring 3和Hibernate的DAO 。 翻译自: https://www.javacodegeeks.com/2011/12/persistence-layer-with-spring-31-and.html