如何使用JDBI 通过单个INSERT 插入多行?
How to use JDBI to insert multiple rows with a single INSERT?
我正在尝试弄清楚如何使用 JDBI 执行多行插入语句。
这是我得到的:
@SqlBatch("INSERT INTO my_table(col1, col2) VALUES (:col1, :col2)")
@BatchSize(size=300)
public abstract int[] insertRows(@BindBean MyObj ... objs);
... 效果很好,但会导致插入的行数与 INSERT 语句一样多。 IE。如果插入两行,结果如下:
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 可以做到这一点,至少不容易...但是可以吗?
v3 中的 @BindBeanList
注释应该可以满足您的需求:
@SqlUpdate("insert into my_table (col1, col2) values <values>")
int insertRows(@BindBeanList(propertyNames = {"col1", "col2"}) MyObj... objs);
不同之处在于我将 @SqlBatch
替换为 @SqlUpdate
,并且 int[]
return 类型变为 int
,因为现在这是一条语句。
我正在尝试弄清楚如何使用 JDBI 执行多行插入语句。
这是我得到的:
@SqlBatch("INSERT INTO my_table(col1, col2) VALUES (:col1, :col2)")
@BatchSize(size=300)
public abstract int[] insertRows(@BindBean MyObj ... objs);
... 效果很好,但会导致插入的行数与 INSERT 语句一样多。 IE。如果插入两行,结果如下:
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 可以做到这一点,至少不容易...但是可以吗?
v3 中的 @BindBeanList
注释应该可以满足您的需求:
@SqlUpdate("insert into my_table (col1, col2) values <values>")
int insertRows(@BindBeanList(propertyNames = {"col1", "col2"}) MyObj... objs);
不同之处在于我将 @SqlBatch
替换为 @SqlUpdate
,并且 int[]
return 类型变为 int
,因为现在这是一条语句。