十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
你說的是集成spring和hibernate所使用的聲明式事務(wù)吧,就是在沒用spring集成前,與數(shù)據(jù)庫交互的增刪改操作都需要開啟事務(wù)再提交對吧,現(xiàn)在這些事情全交給spring做了,你只需要在applicationContext文件中導(dǎo)入相應(yīng)命名空間再配置一下就可以了。預(yù)知詳情,百度一下你就知道。。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、柯橋ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的柯橋網(wǎng)站制作公司
編程式意思就是在方法里通過一些代碼來實(shí)現(xiàn)一些事務(wù)的提交回滾等操作。
與之區(qū)別的是聲明式事務(wù),比如使用spring的注解structs的攔截器等實(shí)現(xiàn)的事務(wù)。
spring的一種事務(wù)封裝,其實(shí)就是注解事務(wù),跟普通開啟事務(wù)沒有區(qū)別。不要要注意的是注解事務(wù)的適用范圍以及注意事項(xiàng),注解事務(wù)有很多情況是不生效的,可以私我。
另外,注解事務(wù)的好處是解耦、簡潔,這也是注解的強(qiáng)大之處
一、什么是Java事務(wù)
通常的觀念認(rèn)為,事務(wù)僅與數(shù)據(jù)庫相關(guān)。
事務(wù)必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性
(isolation)和持久性(durability)的縮寫。事務(wù)的原子性表示事務(wù)執(zhí)行過程中的任何失敗都將導(dǎo)致事務(wù)所做的任何修改失效。一致性表示
當(dāng)事務(wù)執(zhí)行失敗時,所有被該事務(wù)影響的數(shù)據(jù)都應(yīng)該恢復(fù)到事務(wù)執(zhí)行前的狀態(tài)。隔離性表示在事務(wù)執(zhí)行過程中對數(shù)據(jù)的修改,在事務(wù)提交之前對其他事務(wù)不可見。持
久性表示已提交的數(shù)據(jù)在事務(wù)執(zhí)行失敗時,數(shù)據(jù)的狀態(tài)都應(yīng)該正確。
通俗的理解,事務(wù)是一組原子操作單元,從數(shù)據(jù)庫角度說,就是一組SQL指令,要么全部執(zhí)行成功,若因?yàn)槟硞€原因其中一條指令執(zhí)行有錯誤,則撤銷先前執(zhí)行過的所有指令。更簡答的說就是:要么全部執(zhí)行成功,要么撤銷不執(zhí)行。
既然事務(wù)的概念從數(shù)據(jù)庫而來,那Java事務(wù)是什么?之間有什么聯(lián)系?
實(shí)際上,一個Java應(yīng)用系統(tǒng),如果要操作數(shù)據(jù)庫,則通過JDBC來實(shí)現(xiàn)的。增加、修改、刪除都是通過相應(yīng)方法間接來實(shí)現(xiàn)的,事務(wù)的控制也相應(yīng)轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫操作的事務(wù)習(xí)慣上就稱為Java事務(wù)。
二、為什么需要事務(wù)
事務(wù)是為解決數(shù)據(jù)安全操作提出的,事務(wù)控制實(shí)際上就是控制數(shù)據(jù)的安全訪問。具一個簡單例子:比如銀行轉(zhuǎn)帳業(yè)務(wù),賬戶A要將自己賬戶上的1000元
轉(zhuǎn)到B賬戶下面,A賬戶余額首先要減去1000元,然后B賬戶要增加1000元。假如在中間網(wǎng)絡(luò)出現(xiàn)了問題,A賬戶減去1000元已經(jīng)結(jié)束,B因?yàn)榫W(wǎng)絡(luò)中
斷而操作失敗,那么整個業(yè)務(wù)失敗,必須做出控制,要求A賬戶轉(zhuǎn)帳業(yè)務(wù)撤銷。這才能保證業(yè)務(wù)的正確性,完成這個操走就需要事務(wù),將A賬戶資金減少和B賬戶資
金增加方到一個事務(wù)里面,要么全部執(zhí)行成功,要么操作全部撤銷,這樣就保持了數(shù)據(jù)的安全性。
如果你用Spring框架,Spring中可以實(shí)現(xiàn)事務(wù)管理,在spring 配置文件中配置事務(wù)管理器,也可以使用Spring注解式事務(wù),在方法上加上@Transactional注解。
@Transactional
public void save() {
//你的代碼邏輯
}
如果沒有使用Spring框架,可以用JDBC處理事務(wù),如下:
try{
con.setAutoCommit(false);//開啟事務(wù) ......
con.commit();//try的最后提交事務(wù)
} catch() {
con.rollback();//回滾事務(wù)
}
你spring事務(wù)理解不到位,再去看下相關(guān)資料吧。
你上邊所說的inerst update 只要將dao放到一個service下去管理就行 。
spring在service中事務(wù)管理,是當(dāng)他調(diào)用service中的一個方法的時候 就會開啟一個事務(wù),
直到你執(zhí)行完這個方法,才會commit。所以只要其中有一個失敗都會回滾