论坛首页 入门技术论坛

hibernate做持久层,spring管理事物的架构方式

浏览 1833 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-18   最后修改:2008-11-18
感觉好像所有的东西都是spring,spring ,spring....
的确,ormapping方面来说,hibernate在国内还算比较大众的一个框架,开发起来没风险,学习起来也有丰富的资源
就mvc来说呢,struts1是比较大众耳熟能详的,虽然就像jbuilder换了eclipse的芯,struts换了webwork的芯一样,虽然注定是呗淘汰的东西,但是就国内的新技术接受能力来看,struts1至少在国内还是有市场滴...
spring呢?太强的一个东西了,什么都能做...你像用它来做持久?没问题,想用它来做mvc?没问题,但是springMVC说实话有点玩不动..所以比较中立的开发方式(人家说的)是spring配合一个熟悉的 mvc框架,和orm框架,spring来“组装”,同时spring管理持久层的事物...




hibernate做持久层,spring管理事物的架构方式


<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
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-2.0.xsd"> 


<!-- define basic datasource by apache dbcp 
虽然hibernate的高级版本已经明确的指出对dbcp不再提供支持,但是就开发阶段来说, 
使用dbcp配置数据源未曾不可..... 
--> 
<bean id="basicDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
  <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
  <property name="url"             value="jdbc:mysql://localhost/schooldb?characterEncoding=utf-8" /> 
  <property name="username"        value="root" /> 
  <property name="password"        value="123456"/> 
</bean> 




<!-- define transaction aware data source proxy 
定义proxy,是spring感知数据源.... 
--> 
<bean id="transactionAwareDataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> 
  <constructor-arg> 
   <ref bean="basicDataSource" /> 
  </constructor-arg> 
</bean> 




<!-- define session factory by  transaction aware data source proxy 
使用spring support的sessionfactory 配合spring已经感知的数据源来定义sessionfactory... 
--> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  <property name="dataSource"> 
   <ref bean="transactionAwareDataSourceProxy" /> 
  </property> 
  <property name="hibernateProperties"> 
   <props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
    <prop key="hibernate.show_sql">false</prop> 
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</prop> 
   </props> 
  </property> 
  <property name="mappingResources"> 
   <list> 
    <value>mapping.hbm.xml</value> 
   </list> 
  </property> 
</bean> 






<!-- define dao by session factory 
定义 data access object , 
次类需要  扩展 org.springframework.orm.hibernate3.support.HibernateDaoSupport... 
--> 
<bean id="hibernateBasedDAO" class="com.gmail.chrnc0000.hibernate.HibernateBasedDAO"> 
  <property name="sessionFactory"> 
   <ref bean="sessionFactory" /> 
  </property> 
</bean> 



<!-- define spring  transaction manager by session factory --> 
<bean id="hibernateTransactionManager" 
  class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  <property name="sessionFactory"> 
   <ref bean="sessionFactory" /> 
  </property> 
</bean> 


<!-- 
定义 spring interceptor ,并且对需要回滚的异常进行配置... 
--> 
<bean id="transactionProxyFactoryBean" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
  <property name="transactionManager"> 
   <ref bean="hibernateTransactionManager" /> 
  </property> 
  <property name="transactionAttributes"> 
   <props> 
    <prop key="find*">PROPAGATION_REQUIRED</prop> 
    <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop> 
    <prop key="update*">PROPAGATION_REQUIRED</prop> 
    <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop> 
   </props> 
  </property> 
</bean> 





<!-- define service 
定义interceptor 配合的 service ... 
--> 
<bean id="transactionProxyBasedService" parent="transactionProxyFactoryBean"> 
  <property name="target"> 
   <bean class="com.gmail.chrnc0000.spring.TransactionProxyBasedService"> 
    <property name="hibernateBasedDAO"> 
     <ref local="hibernateBasedDAO" /> 
    </property> 
   </bean> 
  </property> 
</bean> 





<!-- export rmi service 
如果需要的话,把interceptor配合的service 暴露... 
--> 
<bean id="BLService" class="org.springframework.remoting.rmi.RmiServiceExporter"> 
  <property name="serviceName" value="BLService" /> 
  <property name="service" ref="transactionProxyBasedService" /> 
  <property name="serviceInterface" value="com.gmail.chrnc0000.IService" /> 
  <property name="registryPort" value="1299" /> 
</bean> 




</beans>
 


   发表时间:2008-11-18  
小心,这种帖子很容易被人投新手帖的.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics