不推荐使用编程式事务
在Spring-dao.xml中配置声明式事务
<!--配置声明式事务 -->
<!--获得transactionManager然后把他丢给他的构造器 constructor-arg -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
结合aop实现事务的织入 分两步
第一步:
<!--1、配置事务通知
事务式tx:开头 需要先导入事务的约束文件 xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
和导入aop的约束一样的就是把sop改成tx
-->
<!--id=接你想给这个事务通知取什么名字 transaction-manager=是spring提供的唯一的事务管理器,这一句语句是固定的 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给那些方法配置事务 就是name=后面接方法名 也口语直接接 * 给所有的方法配置事务-->
<!--配置事务的传播特性 增删改需要配置 propagation= 默认的为REQUIRED 我们一般也设置为这个 查询的话我们用可以改成read-only="true"
只读的意思 -->
<tx:attributes>
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="delete" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="query" read-only="true"/>
<!--一般情况我们可以简单的写成下面这样 让所有的方法都支出事务 -->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
第二步:
<!--配置事务通知完成后开始第二步 配置aop切入 -->
<aop:config >
<!--设置切入点 -->
<aop:pointcut id="txPoint" expression="execution(* com.li.dao.*.*(..))"/>
<!--给表达式下面的所有包织入事务将txAdvice切入到txPoint-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
</aop:config>