Sprint+Hibernate

一.Sprint构建Hibernate的优点

1.测试简单
2.异常封装
3.通用的资源管理
4.综合的事务管理

结构:dataDource==》sessionFaction==》fwxxDao==》fwxxAction

 


二.事物传播机制


1.PROPAGATION_REQUIRED
支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

2.PROPAGATION_SUPPORTS
支持当前事物,如果当前没有事物,就以非实物方式执行

3.PROPAGATION_NOT_SUPPORTED
以非实物方法执行操作,如果当前存在事物,就把事物挂起

 

三.注解式事物

<!--启动事物的注解功能-->

<tx:annotation-driven transaction-manager="transactionManger"/>

注释:如果事务管理器的id是transactionManager,这里可以不对transaction-manager进行配置,即<tx:annotation-driven />就可以。 2.这个配置是告诉spring在类(接口)层面或者方法层面上检查应用程序上下文中的所有标准了@Transactional的bean,spring将自动把事务通知的内容通知给它。 3.这个通知的事务参数将由@Transactional注释的参数来定义。 4.如果注释的是接口,则该接口的所有实现类都将被事务化。


注解案例:

@Transactional(propagation=Propagation.SUPPORTS,readOnly=true, rollbackFor=RuntimeException.class) //设置默认的事务管理策略,即没有标注@Transactional的方法的事务处理方式,意思为不要求方法必须在一个事务中运行 public class InitUserData {

//使用方法上声明的事务管理策略,这里的意思为需要在一个事务中运行. @Transactional(propagation=Propagation.REQUIRED,readOnly=false)

 


四.Spring与Hibernate的整合。再次配置文件之前之前还需配置Hibernate的映射文件,例子如下

 


<!--创建映射文件-->
<hibernate-mapping>
<class name="cn.yunhe.model.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>

<property name="name" type="java.lang.String"/>
<property name="pwd" type="java.lang.String"/>
<property name="age" type="java.lang.Integer"/>

</class>

</hibernate-mapping>

 

 

1.dataSource的配置.在配置文件中,例子如下


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="076634"/>

</bean>

2.sessionFactory的配置.例子如下

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!--引入daataSource配置-->
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<!--配置hibernate-->
<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!--显示sql语句-->
<prop key="hibernate.show_sql">true</prop>
</props>

</property>

3.映射文件的配置,


<property name="mappingResources">
<list>

<value>hbm/User.hbm</value>
</list>
</property>
</bean>


4.
<!--定义失误管理器(声明事物)-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >

<property name="sessionFactory" ref="sessionFactory"/>
</bean>


5.配置事物通知

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- <tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>-->
</tx:advice>


6.定制切面定制规则
<aop:config>

<aop:pointcut id="bizMethods" expression="execution(* cn.yunhe.biz.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods"/>


</aop:config>

7.创建bean对象

<bean id="userDao" class="cn.yunhe.Dao.UserDaoImpl">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

<bean id="userBiz" class="cn.yunhe.Biz.UserBizImpl">
<property name="userDao" ref="userDao"/>
</bean>

posted @ 2017-07-16 14:05  l小样  阅读(98)  评论(0编辑  收藏  举报