﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-向左走向右走-随笔分类-spring</title><link>http://www.blogjava.net/midstr/category/31536.html</link><description>人生總有許多的意外, 
握在手裡的風箏也會... 
突然斷了線——人生總有許多的巧合，
兩條平行綫也可能會...
有交滙的一天</description><language>zh-cn</language><lastBuildDate>Sun, 18 May 2008 19:47:42 GMT</lastBuildDate><pubDate>Sun, 18 May 2008 19:47:42 GMT</pubDate><ttl>60</ttl><item><title>Spring 編程式事務管理 zz</title><link>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Fri, 16 May 2008 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/200797.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/200797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/200797.html</trackback:ping><description><![CDATA[&nbsp; <font style="background-color: #cce8cf"><a title="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398"><font style="background-color: #cce8cf">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398</font></a></font><br />
<br />
這邊以一個簡單的例子來示範Spring的事務管理，對於事務管理定義，我們使用Spring提供的DefaultTransactionDefinition。
<p>　　以JDBC DataSource為例，我們可以使用org.springframework.jdbc.datasource.DataSourceTransactionManager（PlatformTransactionManager的一個實現）作為我們的事務管理員，我們在Bean定義檔中配置，並將DataSource注入給它，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING/DTD&nbsp;BEAN/EN"&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="dataSource"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="driverClassName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.mysql.jdbc.Driver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="url"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc:mysql://localhost:3306/TestDB</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="username"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">root</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="password"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.jdbc.datasource.DataSourceTransactionManager"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="userDAO"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="onlyfun.caterpillar.UserDAO"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
</div>
</div>
<p>　　我們定義了一個簡單的DAO物件，將transactionManager與dataSource注入至其中，UserDAO如下： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeHeader" style="border-bottom-style: solid"><strong>UserDAO.java</strong></div>
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;onlyfun.caterpillar;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.sql.DataSource;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.jdbc.core.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.transaction.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.transaction.support.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.dao.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserDAO&nbsp;{<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DataSource&nbsp;dataSource;<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;PlatformTransactionManager&nbsp;transactionManager;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDataSource(DataSource&nbsp;dataSource)&nbsp;{<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.dataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dataSource;<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setTransactionManager(PlatformTransactionManager&nbsp;transactionManager)&nbsp;{<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.transactionManager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionManager;<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;insertUser(User&nbsp;user)&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/Images/dot.gif" />.<br />
}<br />
}<br />
</span></div>
</div>
</div>
<p>　　insertUser()方法中，我們將實現User的存儲，並使用事務管理，首先看看直接使用trransactionManager如何實現事務，我們需要事務定義，作為示範，這邊先使用Spring預設的即可：DefaultTransactionDefinition，我們的程式示範如下： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<pre class="code-java">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">DefaultTransactionDefinition&nbsp;def&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DefaultTransactionDefinition();<br />
TransactionStatus&nbsp;status&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionManager.getTransaction(def);<br />
</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
JdbcTemplate&nbsp;jdbcTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate(dataSource);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring008',&nbsp;'caterpillar',&nbsp;'M',&nbsp;29)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring009',&nbsp;'momor',&nbsp;'F',&nbsp;26)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring010,&nbsp;'beckyday',&nbsp;'F',&nbsp;35)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(DataAccessException&nbsp;ex)&nbsp;{<br />
transactionManager.rollback(status);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;也可以執行status.setRollbackOnly();</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;ex;<br />
}<br />
transactionManager.commit(status);</span></div>
</pre>
</div>
</div>
<p>　　在上面的程式中，我們照常執行我們的SQL（為了簡化，我們直接將資料寫在SQL中了，而不是從User物件中取得），注意到我們故意在最後一行SQL中Spring010少寫了一個 ' ，這使得SQL句子不合語法，因而造成DataAccessException（封裝了SQLException），這個例外被catch區塊捕捉，因而執行rollback()取消之後的SQL，如果沒有發生錯誤，則最後我們使用commit()來提交操作。 </p>
<p>　　另一個簡便的方法是使用TransactionTemplate，它封裝了上面的事務流程，透過callback來完成事務，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">TransactionTemplate&nbsp;transactionTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionTemplate(transactionManager);<br />
transactionTemplate.execute(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionCallbackWithoutResult()&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doInTransactionWithoutResult(TransactionStatus&nbsp;status)&nbsp;{<br />
JdbcTemplate&nbsp;jdbcTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate(dataSource);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring008',&nbsp;'caterpillar',&nbsp;'M',&nbsp;29)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring009',&nbsp;'momor',&nbsp;'F',&nbsp;26)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring010,&nbsp;'beckyday',&nbsp;'F',&nbsp;35)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
});<br />
</span></div>
</div>
</div>
<p>　　這邊使用TransactionCallbackWithoutResult，並在它的doInTransactionWithoutResult()中進行SQL操作，如果執行中發生例外，則之前所有的操作取消，否則最後自動提交操作。如果操作完成您想要返回結果物件，則可以使用TransactionCallback，並實現其doInTransaction()，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<pre class="code-java">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">TransactionTemplate&nbsp;transactionTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionTemplate(transactionManager);<br />
Object&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionTemplate.execute(<br />
</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionCallback()&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;doInTransaction(TransactionStatus&nbsp;status)&nbsp;{<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;作一些操作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;收集為結果物件&nbsp;resultObject</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;resultObject;<br />
});<br />
</span></div>
</pre>
</div>
</div>
<img src ="http://www.blogjava.net/midstr/aggbug/200797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-05-16 10:22 <a href="http://www.blogjava.net/midstr/archive/2008/05/16/200797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>