上面一篇文章講到了集成hibernate4,主要是就如何在spring3的環境下如何配置的問題,忽然發現,hibernate的映射文件在sessionFactory的配置內,也和hibernateProperties的配置在一塊兒,sessionFactory是hibernate的核心配置,開發人員不該該也不必總去看到這個文件,而開發人員又必須添加不少的entity的映射文件。在這個操做中,若是有任何的誤操做,損失仍是滿大的,與是如何把常常會頻繁操做的hibernate-mapping內容從SessionFactory的配置中分離出去就成了一個良好的框架設計的當務之急的選擇。因而動手,其實很簡單,在spring的ioc環境下,這一些都變的是那麼的優雅。spring
首先:編寫IMapping接口:sql
- public interface IMapping
- {
- public String[] getMappingResources();
- }
而後寫實現:session
- public class HibernateMappingImpl implements IMapping
- {
- private String[] mappingResources;
- public String[] getMappingResources()
- {
- return mappingResources;
- }
- public void setMappingResources(String[] mappingResources)
- {
- this.mappingResources = mappingResources;
- }
- }
而後編寫類去繼承LocalSessionFactoryBean:app
- public class XKLocalSessionFactoryBean extends LocalSessionFactoryBean
- {
- private IMapping iMapping;
- public IMapping getiMapping()
- {
- return iMapping;
- }
- public void setiMapping(IMapping iMapping)
- {
- this.iMapping = iMapping;
- super.setMappingResources(iMapping.getMappingResources());
- }
- }
到這你們也許都看明白了。 框架
下面將這些類配置到相關配置中去:ide
sessionFactory的配置改成:學習
- <bean id="sessionFactory" class="com.xk.commons.config.XKLocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <property name="iMapping" ref="hibernateMapping">
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">false</prop>
- <prop key="hibernate.jdbc.use_scrollable_resultset">false</prop>
- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
- <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
- </props>
- </property>
- </bean>
對應的已經換成咱們本身實現的com.xk.commons.config.XKLocalSessionFactoryBean, 而原來的 mappingResources 的屬性配置,也換成了<property name="iMapping" ref="hibernateMapping"> 引用的是個類,就是咱們本身定義的那個IMapping接口的類,咱們單獨的新建一個文件: hibernate-mapping.xml,之後的實體映射的配置,就不用去核心的配置裏添加修改了,就都到這個項目級別的文件中去修改,下面看這個類的配置:this
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
- <bean id="hibernateMapping" class="com.xk.commons.config.HibernateMappingImpl">
- <property name="mappingResources">
- <list>
- <value>com/xk/model/XkBaseCity.hbm.xml</value>
- <value>com/xk/model/XkBaseProvince.hbm.xml</value>
- <value>com/xk/model/XkSystemDate.hbm.xml</value>
- <value>com/xk/model/XkTrain.hbm.xml</value>
- </list>
- </property>
- </bean>
- </beans>
看看,乾淨明瞭,給開發人員培訓的時候,能夠叫他們忽略掉,那些核心配置的內容,只須要叫他們知道開發的規則,和如何作就ok了,能夠大大的下降開發人員的學習成本和技術要求。spa