S2S3H4框架深度集成搭建(4) hibernate Mapping 的配置分离

上面一篇文章讲到了集成hibernate4,主要是就如何在spring3的环境下如何配置的问题,突然发现,hibernate的映射文件在sessionFactory的配置内,也和hibernateProperties的配置在一起,sessionFactory是hibernate的核心配置,开发人员不应该也没必要总去看到这个文件,而开发人员又必须添加很多的entity的映射文件。在这个操作中,如果有任何的误操作,损失还是满大的,与是如何把经常会频繁操作的hibernate-mapping内容从SessionFactory的配置中分离出去就成了一个良好的框架设计的当务之急的选择。于是动手,其实很简单,在spring的ioc环境下,这一些都变的是那么的优雅。

首先:编写IMapping接口:

  
  
  
  
  1. public interface IMapping  
  2. {  
  3.     public String[] getMappingResources();  

然后写实现:

  
  
  
  
  1. public class HibernateMappingImpl implements IMapping  
  2. {  
  3.     private String[] mappingResources;  
  4.  
  5.     public String[] getMappingResources()  
  6.     {  
  7.         return mappingResources;  
  8.     }  
  9.  
  10.     public void setMappingResources(String[] mappingResources)  
  11.     {  
  12.         this.mappingResources = mappingResources;  
  13.     }  

然后编写类去继承LocalSessionFactoryBean:

  
  
  
  
  1. public class XKLocalSessionFactoryBean extends LocalSessionFactoryBean  
  2. {  
  3.     private IMapping iMapping;  
  4.  
  5.     public IMapping getiMapping()  
  6.     {  
  7.         return iMapping;  
  8.     }  
  9.  
  10.     public void setiMapping(IMapping iMapping)  
  11.     {  
  12.         this.iMapping = iMapping;  
  13.         super.setMappingResources(iMapping.getMappingResources());  
  14.     }  

到这大家也许都看明白了。

下面将这些类配置到相关配置中去:

sessionFactory的配置改为:

  
  
  
  
  1. <bean id="sessionFactory" class="com.xk.commons.config.XKLocalSessionFactoryBean"> 
  2.         <property name="dataSource" ref="dataSource"/> 
  3.         <property name="iMapping" ref="hibernateMapping"> 
  4.         </property> 
  5.         <property name="hibernateProperties"> 
  6.             <props> 
  7.                 <prop key="hibernate.show_sql">true</prop> 
  8.                 <prop key="hibernate.format_sql">false</prop> 
  9.                 <prop key="hibernate.jdbc.use_scrollable_resultset">false</prop> 
  10.                 <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> 
  11.                 <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>   
  12.             </props> 
  13.         </property> 
  14.     </bean>   

对应的已经换成我们自己实现的com.xk.commons.config.XKLocalSessionFactoryBean, 而原来的 mappingResources 的属性配置,也换成了<property name="iMapping" ref="hibernateMapping"> 引用的是个类,就是我们自己定义的那个IMapping接口的类,我们单独的新建一个文件: hibernate-mapping.xml,以后的实体映射的配置,就不用去核心的配置里添加修改了,就都到这个项目级别的文件中去修改,下面看这个类的配置:

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:aop="http://www.springframework.org/schema/aop" 
  4.        xmlns:tx="http://www.springframework.org/schema/tx" 
  5.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.            http://www.springframework.org/schema/tx   
  9.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  10.            http://www.springframework.org/schema/aop   
  11.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 
  12.              
  13.              
  14.     <bean id="hibernateMapping" class="com.xk.commons.config.HibernateMappingImpl"> 
  15.         <property name="mappingResources"> 
  16.             <list> 
  17.                 <value>com/xk/model/XkBaseCity.hbm.xml</value> 
  18.                 <value>com/xk/model/XkBaseProvince.hbm.xml</value> 
  19.                 <value>com/xk/model/XkSystemDate.hbm.xml</value> 
  20.                 <value>com/xk/model/XkTrain.hbm.xml</value> 
  21.             </list> 
  22.         </property> 
  23.     </bean>     
  24. </beans> 

看看,干净明了,给开发人员培训的时候,可以叫他们忽略掉,那些核心配置的内容,只需要叫他们知道开发的规则,和如何做就ok了,可以大大的降低开发人员的学习成本和技术要求。

本文出自 “My Joy is my joy ~” 博客,转载请与作者联系!

你可能感兴趣的:(struts2,Spring3,Hibernate4)