欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

事務管理

系統 2024 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條評論
主站蜘蛛池模板: 欧美人两个人激情的免费视频 | 五月激情综合网 | 欧美精品一区二区在线观看 | 美女求操 | 人人人人干| 免费看a网站 | 日本在线看 | 成年人在线观看视频 | sese在线视频 | 国产高清精品在线 | 国产成人综合AV在线观看不止 | 久久精品性视频 | 国产亚洲欧美在线 | 九九热视频精品在线观看 | 色悠久久久久综合网伊人男男 | 日本高清视频在线播放 | 新视觉yy6080午夜毛片 | 亚洲成人日韩 | 亚洲va中文字幕 | 午夜a级片| 亚洲视频一区在线 | 国产精品成人国产乱一区 | 免费人成网站线观看合集 | 欧美xxxx狂喷水喷水 | 国产噜噜噜精品免费 | 97影院2 | 久久福利| 久久久综合网 | 国产在线精品视频 | 男进女内免费视频无遮挡 | 国产人成精品一区二区三 | 亚洲国产日韩欧美综合久久 | 天天拍夜夜操 | 久久狠狠 | 午夜影院在线免费观看视频 | 99热这里只有精品国产99 | 天天爽天天碰狠狠添 | 五月综合久久 | 欧美成人网在线综合视频 | 久操精品 | 国产精品久久99 |