Spring,iBatis,MySQL - 如何管理交易?

时间:2009-11-01 03:12:39

标签: mysql spring ibatis

您好我正在使用spring ibatis和mysql构建一个Web应用程序。

我将使用mysql存储过程,我将用ibatis调用它们。 我的问题是如何管理交易。 我应该管理存储过程内部的事务,还是使用spring / ibatis或两者管理?

2 个答案:

答案 0 :(得分:1)

我不知道你为什么要使用存储过程。既然你是,我不知道iBatis会给你买什么。

如果我正在编写这个应用程序,我要么使用Spring和iBatis,要么使用Spring和存储过程,但不能同时使用两者。

我使用Spring管理事务,确保在存储过程中放置​​NO事务逻辑。

答案 1 :(得分:1)

我非常高兴地使用了Ibatis和存储过程,但我认为这种做法没有任何不妥之处。

Ibatis非常适合方便地将参数传递到您的更改数据过程中,以及适当地处理get-data procs的结果集。

如果您的过程选择这样做,Ibatis也可以处理多个结果集的输出。

在交易方面:这取决于。如果您的应用程序在自动提交模式下通常可以非常愉快地运行,但是您有一些需要事务的不同过程,那么proc-managed可能对您有用。您可以设计您的应用程序,以便任何需要事务的东西都由单个“父”proc编排。并不是说这是一种特别令人钦佩的模式,但它可能会在合理的范围内发挥作用。

如果这听起来不合适,那么Spring管理的交易绝对是从第1天开始实施的最佳选择,而且这种方法最有可能与您的应用程序一起优雅地发展。

最后的想法 - 了解事务的嵌套,即如果你有app / Spring事务管理,无论你在procs中处理什么事务处理,直到你从应用程序端COMMIT那些“内部”提交都没有“正确” “承诺(他们可以使用,但这比我打算进入这里更多)。

编辑 - 自写这篇文章以来,我了解到不同的数据库以不同的方式处理COMMIT的嵌套。看起来Oracle特别将COMMIT视为COMMIT而不管嵌套,因此在其他应用程序管理的事务中提交的proc会得到正确的提交。