如何使用JDBI通过单个INSERT插入多行?

Edd*_*ied 5 java jdbi

我试图弄清楚如何使用JDBI执行多行插入语句。

这是我所拥有的:

@SqlBatch("INSERT INTO my_table(col1, col2) VALUES (:col1, :col2)")
@BatchSize(size=300)
public abstract int[] insertRows(@BindBean MyObj ... objs);
Run Code Online (Sandbox Code Playgroud)

...效果很好,但是导致插入的行数与INSERT语句数一样多。即,如果要插入两行,则结果如下:

INSERT INTO my_table(col1, col2) VALUES ('a', 'b');
INSERT INTO my_table(col1, col2) VALUES ('c', 'd');
Run Code Online (Sandbox Code Playgroud)

...当我想要的东西看起来像这样:

INSERT INTO my_table(col1, col2) VALUES ('a', b'), ('c', 'd');
Run Code Online (Sandbox Code Playgroud)

我希望将可变数量的对象作为输入。我不认为JDBI可以做到这一点,至少不容易...但是可以吗?

qua*_*ial 6

@BindBeanListv3中的注释应该可以满足您的要求:

@SqlUpdate("insert into my_table (col1, col2) values <values>")
int insertRows(@BindBeanList(propertyNames = {"col1", "col2"}) MyObj... objs);
Run Code Online (Sandbox Code Playgroud)

请注意,它@SqlBatch已被替换为@SqlUpdate,并且int[]返回类型已更改为,int因为这现在是一条语句。

  • 哇。如果文档中包含“@BindBeanList”,那就太好了。:| (3认同)
  • _“@SqlBatch 已替换为 @SqlUpdate”_ -- 不符合 API 文档:http://jdbi.org/apidocs/org/jdbi/v3/sqlobject/statement/SqlBatch.html (2认同)