參考地址: http://blog.csdn.net/ufo2910628/article/details/46325651html
參考地址: http://www.jb51.net/article/70816.htmspring
參考地址: http://www.cnblogs.com/newsouls/p/3988216.html數據庫
參考地址: http://www.open-open.com/lib/view/open1414310646012.htmlexpress
springmvc層也就是 controller層儘可能不要寫太多代碼, 若是隻是對 數據庫的查詢,那麼能夠隨便寫代碼,寫在service層能夠,寫在controller層也能夠,可是推薦寫在 servi層寫代碼,contrller只是作簡單的額外處理和 轉發。mvc
可是若是整個mvc的過程設計到了 數據庫的 增刪改,那麼就必須將 代碼寫入service層裏面了,由於這樣是比較方便事物的管理的, 出現了異常的 數據的回滾。好比 事物的聲明式 註解:.net
@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)設計
是應該只用在service層的,這是比較合理和常規的作法,在contrller層是 不能進行事物的管理。除非進行了配置htm
Spring事務類型詳解:blog
PROPAGATION_REQUIRED--支持當前事務,若是當前沒有事務,就新建一個事務。這是最多見的選擇。事務
PROPAGATION_SUPPORTS--支持當前事務,若是當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY--支持當前事務,若是當前沒有事務,就拋出異常。
PROPAGATION_REQUIRES_NEW--新建事務,若是當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED--以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER--以非事務方式執行,若是當前存在事務,則拋出異常。
PROPAGATION_NESTED--若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則進行與PROPAGATION_REQUIRED相似的操做。
以上四種配置方式最經常使用的仍是第1、二種,第三種是比較老舊的方式,而註解的方式不太適合比較大的項目,用於簡單的小項目仍是很好的,其特色就是簡單明瞭。每種方法都有每種方法的特色跟適用的環境,沒有絕對的好與壞,只不過前兩種在實際的工做當中用的更多一些。
<!-- 第一種配置事務的方式 ,tx--> <tx:advice id="txadvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="daoMethod" expression="execution(* com.dao.*.*(..))"/> <aop:advisor pointcut-ref="daoMethod" advice-ref="txadvice"/> </aop:config>
expression="execution(* com.dao.*.*(..))" 其中第一個*表明返回值,第二*表明dao下子包,第三個*表明方法名,「(..)」表明方法參數。