【发布时间】:2009-11-01 03:12:39
【问题描述】:
您好,我正在使用 spring ibatis 和 mysql 构建一个 Web 应用程序。
我将使用mysql存储过程,我会用ibatis调用它们。 我的问题是关于如何管理交易。 我应该在存储过程中管理事务还是使用 spring/ibatis 或两者兼而有之?
【问题讨论】:
您好,我正在使用 spring ibatis 和 mysql 构建一个 Web 应用程序。
我将使用mysql存储过程,我会用ibatis调用它们。 我的问题是关于如何管理交易。 我应该在存储过程中管理事务还是使用 spring/ibatis 或两者兼而有之?
【问题讨论】:
非常高兴地使用了 Ibatis 和存储过程,我认为这种方法没有任何不妥之处。
Ibatis 非常适合方便地将参数传递到您的更改数据过程,以及适当地处理获取数据过程的结果集。
如果您的 proc 选择这样做,Ibatis 还可以处理多个结果集的输出。
在交易方面:这取决于。如果您的应用程序在自动提交模式下通常可以非常愉快地运行,但您有一些需要事务的不同 proc,那么 proc-managed 可能适合您。您可以设计您的应用程序,以便任何需要事务的东西都由单个“父”过程来编排。并不是说这是一个特别令人钦佩的模式,但它可能会在合理的范围内起作用。
如果这听起来不合适,那么 Spring 管理的事务绝对是从第一天开始实施的好选择,并且这种方法最有可能随着您的应用程序优雅地发展。
最后的想法 - 注意事务的嵌套,即如果你有应用程序/Spring事务管理,无论你在 procs 中放置什么事务处理,直到你从应用程序端 COMMIT 那些“内部”提交不是“正确” " 承诺(它们可以有用途,但这比我打算在这里介绍的要多)。
编辑 - 写这篇文章后,我了解到不同的 DB 处理 COMMIT 嵌套的方式不同。似乎 Oracle 特别将 COMMIT 视为 COMMIT 而不管嵌套如何,因此在其他应用程序管理的事务中提交的 proc 确实得到正确提交。
【讨论】:
我不知道您为什么要使用存储过程。既然你是,我不知道 iBatis 给你买了什么。
如果我正在编写这个应用程序,我会使用 Spring 和 iBatis 或 Spring 和存储过程,但不能同时使用两者。
我将使用 Spring 管理事务,确保在存储过程中不放置任何事务逻辑。
【讨论】: