<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
現在有個賬戶表,裡面存著使用者金額。
如果要真正地做好轉賬的操作,就要用到事務,否則當出現異常後會出現資料不一致等問題。
try { // 第一步 開啟事務 // 第二步 進行業務操作 // 第三步 沒有發生異常,提交事務 } catch(){ // 第四步 發生異常,事務回滾 }
通常,把事務加在 service 層(業務邏輯層)。
而在 spring 中管理事務可以有 2 種方式實現:
在 spring 中進行宣告式事務管理,底層使用的是 AOP 原理。
spring 提供了一個介面 PlatformTransactionManager ,代表事務管理器。此介面針對不同的框架提供不同的實現類。
利用idea工具,展開結構,使用 jdbcTemplate 用到的是 DataSourceTransactionManager 。
建立事務管理器。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--注入資料來源--> <property name="dataSource" ref="dataSource"></property> </bean>
開啟事務註解,使用名稱空間 tx
。
<!--開啟事務註釋--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
註解 @Transactional 可以加在 service 類上,也可以加到方法上:
加到類上,表示類下所有的方法都新增了事務。加到方法,表示只有該方法新增事務。
@Service @Transactional public class UserService { @Autowired private UserDao userDao; // 轉賬方法 public void accountMoney() { // 大周 少 100 userDao.reduceMoney(); // 模擬異常 int i = 1/0; // 小毛 加 100 userDao.addMoney(); } }
介面實現類 UserDaoImpl 。
@Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void addMoney() { String sql = "update t_account set money=money+? where username=?"; jdbcTemplate.update(sql, 100, "小毛"); } @Override public void reduceMoney() { String sql = "update t_account set money=money-? where username=?"; jdbcTemplate.update(sql, 100, "大周"); } }
到測試類裡執行一下:
public class TestTrans { @Test public void testJdbc() { ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userService", UserService.class); userService.accountMoney(); } }
注意,上面的 service 裡我手動新增了異常,所以執行後,事務應該是要回滾操作,2 個人的金額仍然各是 1000 。
八月 07, 2021 10:39:57 上午 com.alibaba.druid.pool.DruidDataSource info 資訊: {dataSource-1} inited java.lang.ArithmeticException: / by zero
重新整理資料表。
現在我去掉 service 類中的異常 int i = 1/0;
,重新執行測試方法:
八月 07, 2021 10:47:01 上午 com.alibaba.druid.pool.DruidDataSource info 資訊: {dataSource-1} inited Process finished with exit code 0
重新整理資料表。
結果正確。
以上就是spring學習JdbcTemplate資料庫事務管理的詳細內容,更多關於spring JdbcTemplate資料庫事務的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45