我正在试图弄清楚如何使用JDBI进行多行插入语句。
这就是我所拥有的:
@SqlBatch("INSERT INTO my_table(col1, col2) VALUES (:col1, :col2)")
@BatchSize(size=300)
public abstract int[] insertRows(@BindBean MyObj ... objs);
...工作正常,但导致插入的行数与INSERT语句一样多。即如果插入了两行,则会产生如下所示:
INSERT INTO my_table(col1, col2) VALUES ('a', 'b');
INSERT INTO my_table(col1, col2) VALUES ('c', 'd');
......当我想要的时候看起来像这样:
INSERT INTO my_table(col1, col2) VALUES ('a', b'), ('c', 'd');
我希望将可变数量的对象作为输入。我不认为JDBI可以做到这一点,至少不容易......但可以吗?
答案 0 :(得分:4)
v3中的@BindBeanList
注释应该可以实现您的目标:
@SqlUpdate("insert into my_table (col1, col2) values <values>")
int insertRows(@BindBeanList(propertyNames = {"col1", "col2"}) MyObj... objs);
请注意,@SqlBatch
已替换为@SqlUpdate
,而int[]
返回类型已更改为int
,因为现在这是一个声明。