日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

事務(wù)管理

系統(tǒng) 2242 0
編程式的事務(wù)管理
另外,編程式事務(wù)提供了TransactionTemplate 模板類,該類可以大大減少事務(wù)操作的代碼。因此TransactionTemplate 采用Callback 避免讓開發(fā)者重復(fù)書寫其打開事務(wù)、提交事務(wù)及回滾事務(wù)等代碼,同時TransactionTemplate 無須書寫大量的try..catch 塊。
HibernateTemplate 必須提供PlatformTransactionManager 實例。該實例既可以在代碼中手動設(shè)置,也可以使用Spring 的依賴注入。總之,只要獲取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事務(wù)操作。
使用TransactionTemplate 不需要顯式地開始事務(wù),甚至不需要顯式地提交事務(wù)。這些步驟都由模板完成。但出現(xiàn)異常時,應(yīng)通過TransactionStatus 的setRollbackOnly 顯式回滾事務(wù)。
TransactionTemplate 的execute 方法接收一個TransactionCallback 實例。Callback 也是Spring 的經(jīng)典設(shè)計,用于簡化用戶操作, TransactionCallback 包含如下方法。
? Object dolnTransaction(TransactionStatus status) 。
該方法的方法體就是事務(wù)的執(zhí)行體。
如果事務(wù)的執(zhí)行體沒有返回值,則可以使用TransactionCallbackWithoutResultl類的實例。這是個抽象類,不能直接實例化,只能用于創(chuàng)建匿名內(nèi)部類。它也是TransactionCallback 接口的子接口,該抽象類包含一個抽象方法:
? void dolnTransactionWithoutResult(TransactionStatus status)該方法與dolnTransaction 的效果非常相似,區(qū)別在于該方法沒有返回值,即事務(wù)執(zhí)行體無須返回值。
在下面的示例中, PlatformTransactionManager 實例采用適用于Hibernate 的事務(wù)管理器來實現(xiàn)類HibernateTransactionManager,該實現(xiàn)類是個局部事務(wù)管理器,容器中僅僅部署了該事務(wù)管理器bean ,因此應(yīng)在代碼中于動為TransactionTemplate 注入事務(wù)管理器bean。下面是Hibernate 局部事務(wù)管理的配置文件的源代碼:?
<? xml?version="1.0"?encoding="gb2312" ?>
<! ?--?Spring?配置文件的DTD?定義-- >
<! DOCTYPE?beans?PUBL工C?"-//SPRING//DTD?BEAN//EN"
''http://www.springfrarnework.org/dtd/sp工rng-beans.dtd"
>
<!-- ?Spring?配置文件的根元素是beans -->
????
< beans >
????????
<!-- 定義數(shù)據(jù)源,該bean?的ID?為dataSource-→
????????<bean?id="dataSource"?class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource">
????????????<!--?指定數(shù)據(jù)庫驅(qū)動
-->
????????????
< property? narne ="driverClassNarne" >< value > corn.rnysql.jdbc.Driver </ value ></ property >
????????????
<!-- ?指定連接數(shù)據(jù)庫的URL -->
????????????
< property? narne ="url" >< value > jdbc:rnysql://wonder:3306/j2ee </ value ></ property >
????????????
<!-- root?為數(shù)據(jù)庫的用戶名 -->
????????????
< property? name ="username" >< value > root </ value ></ property >
????????????
<!-- ?pass?為數(shù)據(jù)庫密碼 -->
????????????
< property? name ="password" >< value > pass </ value ></ property >
????????
</ bean >
????????
<!-- 定義Hibernate?的SessionFactory -->
????????
< bean? id ="sessionFactory" ?class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
????????????
<!-- 依賴注入數(shù)據(jù)源,注入上文定義的dataSource -->
????????????
< property? name ="dataSource" >< ref? local ="dataSource" /></ property >
????????????
<!-- mappingResouces屬性用來列出全部映射文件>
????????????<property?name="mappingResources">
????????????????<list>
????????????????????<!--以下用來列出所有的PO?映射文件
-->
????????????????????
< value > lee/MyTest.hbm.xml </ value >
????????????????
</ list >
????????????
</ property >
????????
<!-- 定義Hibernate?的SessionFactory的屬性 --> ????
????????????
< property? name ="hibernateProperties" >
????????????????
< props >
????????????????????
<!-- ?指定Hibernate?的連接方法 -->
????????????????????
< prop? key ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
????????????????????
<! ?不同數(shù)據(jù)庫連接,啟動時選擇create?,?update?,?create-drop-- >
????????????????????
< prop? key ="hibernate.hbm2ddl.auto" > update </ prop >
????????????????
</ props >
????????????
</ property >
????????
</ bean >
????????
<!-- 配置Hibernate?的事務(wù)管理器一〉
????????<!--使用HibernateTransactionManager類,該類是PlatformTransactionManager?接口針對采用Hibernate持久化連接的特定實現(xiàn)。
-->
????????
< bean? id ="transactionManager" ????????class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
????????
<!-- HibernateTransactionManager?bean?需要依賴注入一個SessionFactory?bean?的引用 -->
????????????
< property? name ="sessionFactory" >
????????????????
< ref? local ="sessionFactory" />
????????????
</ property >
????????
</ bean >
</ beans >

?

下面是采用TransactionTemplate和HibemateTemplate的事務(wù)操作代碼:

public ? class ?TransactionTest
... {
public ? static ? void ?main(String[]?args)
... {
????
// 因為并未在web?應(yīng)用中測試,故需要手動創(chuàng)建Spring?的上下文
???? final ?ApplicationContext?ctx? = ? new ?FileSystemXrnlApplicationContext( " bean.xml " );
????
// 獲得Spring?上下文的事務(wù)管理器
????PlatformTransactionManager?transactionManager = (PlatformTransactionManager)ctx.getBean( " transactionManager " );
????
final ?SessionFactory?sessionFactory? = ????(SessionFactory)ctx.getBean( " sessionFactory " );
????
// 以事務(wù)管理器實例為參數(shù),創(chuàng)建TransactionTemplate對象
????TransactionTemplate?tt? = ? new ?TransactionTemplate(transactionManager);
????
// 設(shè)置TransactionTemplate的事務(wù)傳播屬性
????tt.?setPropagationBehavior?(TransactionDefinition.PROPAGATION_REQUlRED);
????
// 執(zhí)行TransactionTemplate的execute方法,該方法需要TransactionCallback實例
????tt.execute( new ?TransactionCallbackWithoutResult()
????
// 采用TransactionCallbackWithoutResult匿名內(nèi)部類的形式執(zhí)行
????protectedvoid?dolnTransactionWithoutResult(TransactionStatus?ts)
????
try
????
... {
????????
// 以SessionFactory?實例為參數(shù)創(chuàng)建HibernateTemplate
????????HibernateTemplate?hibernateTemplate? =
????????
new ?HibernateTemplate(sessionFactory);
????????MyTestpl?
= 丑ew?MyTest?( " Jack " );
????????
// 保存第一個實例
????????hibernateTemplate.save(pl);
????????
// 讓下面的數(shù)據(jù)庫操作拋出異常即可看出事務(wù)效果。前面的操作也
????????
// 不會生效
????????MyTestp2? = ? new ?MyTest?( " Jack " );
????????
// 保存第二個實例,可將Person?的name?屬性設(shè)為標(biāo)識屬性,并
????????
// 引起主鍵重復(fù)的異常,可看出前一條記錄也不會加入數(shù)據(jù)庫中
????????hibernateTemplate.save(p2);
????}

????
catch ?(Exception?e)
????
... {
????????ts.setRollbackOnly();
????????}

????????}

????????}
);
????????}
????????}

事務(wù)管理


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 吴川市| 濮阳市| 潮安县| 班玛县| 昌乐县| 乐昌市| 郴州市| 珠海市| 定陶县| 广宗县| 莫力| 景宁| 武清区| 永善县| 隆子县| 永新县| 廊坊市| 若尔盖县| 浮山县| 龙江县| 林芝县| 杭锦后旗| 黑水县| 鄂尔多斯市| 嫩江县| 无极县| 扬州市| 德惠市| 兴城市| 辽阳县| 阿拉尔市| 岑溪市| 崇礼县| 湖口县| 图们市| 酒泉市| 黔西县| 胶南市| 方正县| 乐昌市| 抚州市|