DropWizard 中的 JDBI 3,onDemand 重用连接

JDBI 3 in DropWizard, onDemand reusing connection

试图从文档中找出这种情况:

http://jdbi.org/#_attached_to_handle

假设你有

SomeClass dao1 = dbi.onDemand(SomeClass.class)

那么你在其他地方的另一种方法中有一些东西:

    try ( Handle handle = dbi.open(); ) {
        SomeClass dao2 = handle.attach(SomeClass.class);

        // What happens here if I use dao1 ? 

        dao1.insert(...)
        dao2.insert(...)
        dao2.insert(...)
        dao1.insert(...)
    }

请注意,在这些情况下它们是同一类型。

是否会为调用的每个插入创建一个新的连接/事务,还是将它们全部分组到一个事务中?

文档中不清楚。

我的想法是,在下面,两者将表现相同,并且 dao1 在调用插入时将检查是否存在正在进行的事务/连接,并针对此类型使用那个。

但是文档说这对于 onDemand 实例是正确的,但是,附加了这个 dao2,而不是像 dao1 那样的 onDemand。

Will there be a new connection / transaction for each insert called or will they all be grouped into one transaction?

dao2 的调用将从显式打开的 handle.

分组到一个事务中

dao1 的调用将使用每个 each 方法调用的单独事务(来自 Jdbi#onDemand javadoc:an extension which opens and closes handles (as needed) for individual method calls)。

如果您想在事务范围内执行来自不同 SqlObject 的方法,您有几种选择:

  • Jdbi#inTransaction/Jdbi#useTransaction:适用于 onDemand/attach
  • @Transaction@CreateSqlObject 的组合,如 docs