複数行のinsert

配列とかListを引数に渡せば、勝手にその配列数分ループして実行してくれます

Dao007.java
public interface Dao007 {
	@SqlBatch("insert into table001 (id, name) values ((select count(*)+1 from table001), :first || '-' || :last)")
	int[] insertBatch(
		@Bind("first") List<String> firstNames,
		@Bind("last") String lastName
	);

	@SqlQuery("select name from table001")
	List<String> findNames();
}
Sample013.java
public static void main(String[] args) {
	String url = "jdbc:postgresql://192.168.52.128/jdbi";
	DBI dbi = new DBI(url, "jdbi_user", "jdbi_pass");

	List<String> firstNames = Arrays.asList(new String[]{"Firstname1", "Firstname2", "Firstname3"});
	String lastName = "Lastname";

	Dao007 dao007 = dbi.onDemand(Dao007.class);
	int[] result = dao007.insertBatch(firstNames, lastName);
	System.out.println("result.length = " + result.length); // 3
	for( int i : result )
	{
		System.out.println("i = " + i); // 1
	}

	for( String name : dao007.findNames() )
	{
		System.out.println("name = " + name);
	}
}

SqlBatch アノテーションで指定したSQLを引数のサイズ分実行してくれます。
実行結果は配列にして返してくれます。この例では3回実行してますので、

  • result[0]:1回目の実行結果
  • result[1]:2回目の実行結果
  • result[2]:3回目の実行結果

となりますね。insert文はinsertした行数が返ることになってまして、それぞれのSQLでは1行だけinsertすることになりますから、全部 1 ですね。
実行結果が必要無ければ、void insertBatch と宣言すればよいです。