注意:Spring中使用Hibernate

阅读更多
1. 建议使用Hiberante进行Session和Transaction的管理
    将需要进行事务的多个原子DAO设置到Service里,在Service层进行事务控制和会话控制。
    设置一个基础的dao,即baseDAO 且继承之HibernateDaoSupport,而业务对象原子DAO,持有一个baseDAO的引用,通过setter注射设置到业务DAO中。
    多个原子DAO,通过setter注射到Service层。

2. 在显示层,一对多显示时,提示Session关闭的问题
    两个解决方法:
    1)在one-to-many设置lazy=false,即不延迟加载子对象,但这样可能会带来性能的问题,特别是父子关系模型是树状结构时。
    2)使用Hibernate提供的openSessiojnInView技术,即在视图层开启和关闭Session,在service层进行Transaction管理,这个较为简单,只需要设置一个filter即可,在web.xml中配置

  hibernateFilter
 
org.springframework.orm.hibernate.support.OpenSessionInViewFilter



  hibernateFilter
  /*



需要注意的是,OpenSessionInViewFilter在调用过程中,需要引用Spring的ApplicationContext,而该对象实例必须是保存在ServletContext中的,因此需要在web.xml中处始化Spring的环境,增加配置如下:

             contextConfigLocation
             /WEB-INF/spring/applicationContext-hibernate.xml
       

    
     context
             org.springframework.web.context.ContextLoaderServlet
             1
    


其中

context
             org.springframework.web.context.ContextLoaderServlet
             1
    


表示在启动时,进行Spring环境的处始化,因此以后如果要引用Spring中的某个bean实例

如下代码即可

org.springframework.context.ApplicationContext ctx = (org.springframework.context.ApplicationContext)application.getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);


然后调用ctx.getBean返回bean实例

Spring不只是AOP和IOC,更提供了大量的可重用技术,譬如request中的重设编码,Spring提供了相应的Filter:org.springframework.web.filter.CharacterEncodingFilter 通过直接配置,即可解决Web应用中POST的中文乱码问题,JMS的org.springframework.jms 包  JavaMail的org.springframework.mail包等等,更多的,请参看Spring的reference,

Spring能改善现有代码结构,大量的减少hard code,加快开发进度;

你可能感兴趣的:(Spring,Hibernate,DAO,Web,JMS)