亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

事務管理

系統 1961 0
編程式的事務管理
另外,編程式事務提供了TransactionTemplate 模板類,該類可以大大減少事務操作的代碼。因此TransactionTemplate 采用Callback 避免讓開發者重復書寫其打開事務、提交事務及回滾事務等代碼,同時TransactionTemplate 無須書寫大量的try..catch 塊。
HibernateTemplate 必須提供PlatformTransactionManager 實例。該實例既可以在代碼中手動設置,也可以使用Spring 的依賴注入。總之,只要獲取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事務操作。
使用TransactionTemplate 不需要顯式地開始事務,甚至不需要顯式地提交事務。這些步驟都由模板完成。但出現異常時,應通過TransactionStatus 的setRollbackOnly 顯式回滾事務。
TransactionTemplate 的execute 方法接收一個TransactionCallback 實例。Callback 也是Spring 的經典設計,用于簡化用戶操作, TransactionCallback 包含如下方法。
? Object dolnTransaction(TransactionStatus status) 。
該方法的方法體就是事務的執行體。
如果事務的執行體沒有返回值,則可以使用TransactionCallbackWithoutResultl類的實例。這是個抽象類,不能直接實例化,只能用于創建匿名內部類。它也是TransactionCallback 接口的子接口,該抽象類包含一個抽象方法:
? void dolnTransactionWithoutResult(TransactionStatus status)該方法與dolnTransaction 的效果非常相似,區別在于該方法沒有返回值,即事務執行體無須返回值。
在下面的示例中, PlatformTransactionManager 實例采用適用于Hibernate 的事務管理器來實現類HibernateTransactionManager,該實現類是個局部事務管理器,容器中僅僅部署了該事務管理器bean ,因此應在代碼中于動為TransactionTemplate 注入事務管理器bean。下面是Hibernate 局部事務管理的配置文件的源代碼:?
<? 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 >
????????
<!-- 定義數據源,該bean?的ID?為dataSource-→
????????<bean?id="dataSource"?class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource">
????????????<!--?指定數據庫驅動
-->
????????????
< property? narne ="driverClassNarne" >< value > corn.rnysql.jdbc.Driver </ value ></ property >
????????????
<!-- ?指定連接數據庫的URL -->
????????????
< property? narne ="url" >< value > jdbc:rnysql://wonder:3306/j2ee </ value ></ property >
????????????
<!-- root?為數據庫的用戶名 -->
????????????
< property? name ="username" >< value > root </ value ></ property >
????????????
<!-- ?pass?為數據庫密碼 -->
????????????
< property? name ="password" >< value > pass </ value ></ property >
????????
</ bean >
????????
<!-- 定義Hibernate?的SessionFactory -->
????????
< bean? id ="sessionFactory" ?class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
????????????
<!-- 依賴注入數據源,注入上文定義的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 >
????????????????????
<! ?不同數據庫連接,啟動時選擇create?,?update?,?create-drop-- >
????????????????????
< prop? key ="hibernate.hbm2ddl.auto" > update </ prop >
????????????????
</ props >
????????????
</ property >
????????
</ bean >
????????
<!-- 配置Hibernate?的事務管理器一〉
????????<!--使用HibernateTransactionManager類,該類是PlatformTransactionManager?接口針對采用Hibernate持久化連接的特定實現。
-->
????????
< bean? id ="transactionManager" ????????class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
????????
<!-- HibernateTransactionManager?bean?需要依賴注入一個SessionFactory?bean?的引用 -->
????????????
< property? name ="sessionFactory" >
????????????????
< ref? local ="sessionFactory" />
????????????
</ property >
????????
</ bean >
</ beans >

?

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

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

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

????????}

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

事務管理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲天天操 | 欧美性猛交ⅹxxx乱大交免费 | 在线观看色视频 | 亚洲加勒比久久88色综合一区 | 亚洲天堂一区二区三区四区 | 国产亚洲欧美在线观看的 | 青青青青久久国产片免费精品 | 在线观看91精品国产不卡免费 | 国产日韩网站 | 国产乱码精品一区二区 | 成熟女人50岁一级毛片不卡 | 久久婷婷久久一区二区三区 | 亚洲精品一区二区在线播放 | 久久人人网 | 人人狠狠综合久久亚洲婷婷 | 水浒传删减剧情在线观看 | 国产一区中文字幕 | 亚洲和欧美毛片久久久久 | 亚洲在线视频观看 | 337p欧美超大胆日本人术艺术 | 一区二区三区在线视频播放 | 国产69精品久久久久777 | 亚洲狠狠网站色噜噜 | 四虎网址最新 | 2021最新国产成人精品视频 | 国语偷拍视频在线观看 | 伊人婷婷色香五月综合缴缴情 | 午夜色影院 | 欧美久久综合九色综合 | 成人在线免费观看 | 久久99国产精品久久99小说 | 99r精品视频 | 香蕉人人超人人超免费看视频 | 亚洲精品一区专区 | 国产精品成人久久久 | 国产在线视频一区 | 国内精品一区视频在线播放 | 亚洲九九香蕉 | 国产亚洲精品97在线观看 | 麻豆国产原创 | 久久精品在线观看 |