您好我正在使用spring ibatis和mysql构建一个Web应用程序。
我将使用mysql存储过程,我将用ibatis调用它们。 我的问题是如何管理交易。 我应该管理存储过程内部的事务,还是使用spring / ibatis或两者管理?
答案 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会得到正确的提交。