spring事務管理

spring事務管理的兩種方式

(1)編程式事務管理(不用)

(2)聲明式事務管理1.基于xml配置文件實現(xiàn)2.基于注解實現(xiàn)

范例:搭建轉(zhuǎn)賬環(huán)境

1.創(chuàng)建數(shù)據(jù)庫表,添加數(shù)據(jù)id,username,salary

2.創(chuàng)建service和dao ,完成注入

需求:小王轉(zhuǎn)賬給小馬

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();

}

產(chǎn)生問題:(1)如果小王少了100之后,出現(xiàn)異常,小馬不會多100,錢丟失。

解決:添加事務解決,出現(xiàn)異常后進行回滾操作


聲明式事務管理(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支持。而數(shù)據(jù)庫默認使用MyISAM引擎,所以需要手動修改引擎


聲明式事務管理(注解)

第一步? 配置事務管理器

第二步? 開啟事務注解

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

第三步?? 在要使用事務的方法的類上加注解

@Transactional

public class OrderService{

.......}

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容