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>