参考地址: 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下子包,第三个*表明方法名,“(..)”表明方法参数。