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