How to use JDBI to insert multiple rows with a single INSERT?

Eddified :

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?

qualidafial :

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);

Note that @SqlBatch was replaced with @SqlUpdate, and the int[] return type was changed to just int since this is now a single statement.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=471258&siteId=1