I'm trying to figure out how to do multi-row insert statements with JDBI.
Here is what I've got:
@SqlBatch("INSERT INTO my_table(col1, col2) VALUES (:col1, :col2)")
@BatchSize(size=300)
public abstract int[] insertRows(@BindBean MyObj ... objs);
... which works fine, but results in as many INSERT statements as there are rows being inserted. I.e. if there are two rows being inserted, it results in something like this:
INSERT INTO my_table(col1, col2) VALUES ('a', 'b');
INSERT INTO my_table(col1, col2) VALUES ('c', 'd');
... when what I want looks like this:
INSERT INTO my_table(col1, col2) VALUES ('a', b'), ('c', 'd');
I'd like it to take a variable number of objects as input. I don't think JDBI can do this, at least not easily... But can it?
The @BindBeanList
annotation in v3 should accomplish you what you want:
@SqlUpdate("insert into my_table (col1, col2) values <values>")
int insertRows(@BindBeanList(propertyNames = {"col1", "col2"}) MyObj... objs);
The difference is I replaced @SqlBatch
with @SqlUpdate
, and int[]
return type became just int
since this is now a single statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With