我们应该在Spring使用什么类型的事务管理策略? 声明性还是程序化? 哪个更好,在什么情况下应该使用它? 你能给出任何适当的例子或教程吗?
还想知道在Spring编写数据库代码时应该使用的最新内容是什么? HibernateTemplate的替代方案是什么?
答案 0 :(得分:11)
程序化交易管理
声明式交易管理
答案 1 :(得分:6)
Spring提供程序化和声明式事务。
程序化意味着您拥有围绕业务代码的事务管理代码。 这提供了极大的灵活性,但难以维护,并且很好,是样板。
声明表示您将事务管理与业务代码分开。 您可以使用注释或基于XML的配置。
programmatic management is more flexible during development time but less flexible during application life
declarative management is less flexible during development time but more flexible during application life
http://docs.spring.io/spring/docs/3.0.x/reference/transaction.html
声明式事务管理允许从Java代码中消除对事务框架的任何依赖性。提供事务支持的四个参与者是事务管理器,代理工厂,事务拦截器和一组事务属性。
建议使用声明式事务管理,替代HibernateTemplates NamedJDBCTemplate或simpleJDBCTemplate
答案 2 :(得分:5)
它们不是相互排斥的。
您可以在大多数情况下使用decalrative事务管理(@Transactional
),并在遇到Spring AOP的限制时回退到程序化事务管理(TransactionTemplate
)(请参阅11.5.1 Understanding the Spring Framework's declarative transaction implementation)或者需要以更复杂的方式控制交易。
答案 3 :(得分:4)
和
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
一般。
的示例:
http://www.springbyexample.org/examples/hibernate-transaction-annotation-config.html
新功能:我建议将DI与SessionFactory一起使用。另请参阅3.1新功能:Hibernate 4支持。见http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/new-in-3.1.html#d0e1385
答案 4 :(得分:1)
只有当您的交易操作数量少时,程序交易管理通常是一个好主意。例如,如果您的Web应用程序仅要求对某些更新操作进行事务处理,则可能不希望使用Spring或任何其他技术来设置事务代理。在这种情况下,使用TransactionTemplate可能是一个好方法。能够显式设置事务名称也是只能使用编程方法进行事务管理的功能。
另一方面,如果您的应用程序具有许多事务操作,则声明式事务管理通常是值得的。它使事务管理脱离业务逻辑,而且配置起来也不难。
答案 5 :(得分:-1)
Spring支持两种类型的事务管理:
<强> 1。程序化事务管理:在编程的帮助下管理事务并提供极大的灵活性,但很难维护。
<强> 2。声明式事务管理:事务管理与业务代码分离,仅使用注释或基于XML的配置来管理事务。