spring事务管理

spring事务管理的两种方式

(1)编程式事务管理(不用)

(2)声明式事务管理1.基于xml配置文件实现2.基于注解实现

范例:搭建转账环境

1.创建数据库表,添加数据id,username,salary

2.创建service和dao ,完成注入

需求:小王转账给小马

dao:public void lessMoney(){

String sql = "update account set salary=salary-? where username=?";

jdbcTemplate.update(sql,100,"小王");

}

public moreMoney(){

String sql = "update account set salary=salary+? where username=?";

jdbcTemplate.update(sql,100,"小马");

}

}

service:public void accountMoney(){

ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");

dao d = (dao) context.getBean("dao");

d.lessMoney();

d.moreMoney();

}

产生问题:(1)如果小王少了100之后,出现异常,小马不会多100,钱丢失。

解决:添加事务解决,出现异常后进行回滚操作


声明式事务管理(xml配置文件)

第一步   配置事务管理器‘

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

</bean>

第二步  配置事务的增强

<tx:advice id="txadvice(随便)" transaction-manager="transactionManager">

<tx:attributes>

<!--设置进行事务操作的方法-->

<tx:method name="account*" propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

第三步   配置切面

<aop:config>

<!--切入点-->

<aop:pointcut expression="execution(*空格com.service.OrderService.*(..))" id="pointcut1"/>

<!--切面-->

<aop:advisor advice-ref="txadvice" pointcut-ref="poincut1"/>

</aop:config>

此时注意:MySql的MyISAM不支持事务,而InnoDB支持。而数据库默认使用MyISAM引擎,所以需要手动修改引擎


声明式事务管理(注解)

第一步  配置事务管理器

第二步  开启事务注解

<tx:annoation-driven transaction-manager="transactionManager"/>

第三步   在要使用事务的方法的类上加注解

@Transactional

public class OrderService{

.......}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容