13

我们应该在 Spring 中使用哪种类型的事务管理策略?声明式还是程序式?哪个更好,在什么情况下应该使用它?你能给出任何适当的例子或教程吗?

还想知道春季写数据库代码时我们应该使用的最新的东西是什么?HibernateTemplate 的替代方案是什么?

4

6 回答 6

17

程序化事务管理

  1. 允许我们通过在源代码中编程来管理事务。
  2. 这意味着在我们的业务逻辑之间硬编码事务逻辑。
  3. 我们使用编程来管理交易
  4. 灵活,但难以维护,业务逻辑量大。在业务逻辑之间引入样板。
  5. 当要引入相对较少的事务逻辑时首选。

声明式事务管理

  1. 允许我们通过配置管理事务。
  2. 这意味着事务逻辑与业务逻辑分开。
  3. 我们使用注释(或 XML 文件)来管理事务。
  4. 易于维护。样板文件远离业务逻辑。
  5. 处理大量事务逻辑时首选。
于 2017-03-24T04:54:52.843 回答
7

它们不是相互排斥的。

@Transactional在大多数情况下,您可以使用声明式事务管理TransactionTemplate(方法。

于 2012-06-27T09:16:00.203 回答
7

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 代码中消除对事务框架的任何依赖。提供事务支持的四个参与者是事务管理器、代理工厂、事务拦截器和一组事务属性。

建议使用声明式事务管理,HibernateTemplate 的替代方案 NamedJDBCTemplate 或 simpleJDBCTemplate

于 2013-09-15T14:27:54.923 回答
3

仅当您有少量事务操作时,程序化事务管理通常是一个好主意。例如,如果您的 Web 应用程序只需要某些更新操作的事务,您可能不想使用 Spring 或任何其他技术设置事务代理。在这种情况下,使用 TransactionTemplate 可能是一个好方法。能够显式地设置事务名称也是只能使用编程方法进行事务管理才能完成的事情。

另一方面,如果您的应用程序有大量事务操作,则声明式事务管理通常是值得的。它将事务管理排除在业务逻辑之外,并且不难配置。

于 2019-09-10T06:52:24.303 回答
0

Spring 支持两种类型的事务管理:

1. 程序化事务管理:事务是借助编程来管理的,提供了极大的灵活性,但很难维护。

2. 声明式事务管理:事务管理与业务代码分离,仅使用注释或基于 XML 的配置来管理事务。

于 2017-10-07T07:33:50.190 回答