不推荐使用编程式事务
在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/txhttps://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>