Java Spring事務使用及驗證過程詳解
事務,只要是為了保證數(shù)據(jù)的原子性。避免出現(xiàn)臟數(shù)據(jù)。
下面來講解下spring是如何使用事務的。
1.配置事務。這里采用的是注解的模式
<!-- 配置事務管理器 ,如果你暫時未使用到事務可以不配置,次以下內(nèi)容均可以在不適用事務的情況下刪除 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" > <property name="dataSource" ref="dataSource"/> </bean> <!-- 開啟事務行為 --> <tx:annotation-driven transaction-manager="transactionManager" />
2.配置就基本搞定了,然后就是在service或者service的方法上使用@Transactional定義是否需要是否管理就行了。
@Transactional @Override public String userInfoData(String id) { // TODO Auto-generated method stub System.out.print("調(diào)用 dao層方法"); UserInfo arr = loginDao.getUser(1); System.out.println("arr id = "+ arr.getId()); System.out.println("arr Username = "+ arr.getUsername()); MoneyInfo money = moneyDao.getmoney(1); moneyDao.InsertMony(500); loginDao.InsertUser(3, "Tigger"); System.out.println("money = "+ money.getMoney()); System.out.println("money += "+ money.getMoney()); Logger log = Logger.getLogger(UserServiceImpl.class); log.info("執(zhí)行了m01..."); //1.mybatis 的自己調(diào)用方法 /* try { mybatisTest(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ //2.spring + mybatis整合后的調(diào)用 return null; }
以上就基本可以搞定了,驗證配置是否成功的話,可以在不加注解的時候插入兩條數(shù)據(jù),后面一條數(shù)據(jù)是會報錯的。
如果不使用事務的話,會發(fā)現(xiàn)第一條插入成功到DB里去了,然后在插入第二條的時候,程序報錯。
如果這里使用@Transactional 開啟事務,那么會發(fā)現(xiàn)兩條數(shù)據(jù)都插入不了,直接報錯了,這里事務就成功的啟用了起來。
@Transactional
(1)這里說明一下,有的把這個注解放在類名稱上面了,這樣你配置的這個@Transactional 對這個類中的所有public方法都起作用.
(2)@Transactional 方法方法名上,只對這個方法有作用,同樣必須是public的方法
(3) 數(shù)據(jù)庫引擎要支持事務,如果是MySQL,注意表要使用支持事務的引擎,比如innodb,如果是myisam,事務是不起作用的
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java Web應用程序?qū)崿F(xiàn)基礎的文件下載功能的實例講解
這里我們演示了Servelet驅(qū)動Tomcat來進行HTTP下載的方法,接下來就詳細來看Java Web應用程序?qū)崿F(xiàn)基礎的文件下載功能的實例講解2016-05-05springboot 配置文件配置項前綴為0的數(shù)字特殊處理方式
這篇文章主要介紹了springboot 配置文件配置項前綴為0的數(shù)字特殊處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02BeanFactory與ApplicationContext的區(qū)別示例解析
這篇文章主要為大家介紹了BeanFactory與ApplicationContext的區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Caused by: java.io.IOException: DerInputStrea
這篇文章主要介紹了Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-10-10