SQL Object API と Fluent API の融合 その2

では前回の予告通り、今回は Object形式とFluent形式の両方を同じコネクションで使用してみましょう。
Daoを生成する時、DBI.open ではなく、Handle.attach を使用します

public static void main(String[] args) {
	String url = "jdbc:postgresql://192.168.52.128/jdbi";
	DBI dbi = new DBI(url, "jdbi_user", "jdbi_pass");

	Handle h = dbi.open(); // ※1

	Dao001 dao = h.attach(Dao001.class); // ※2
	dao.createTable();
	dao.insert("Sample-Dao1-Name");
	String name = dao.findNameById(1);
	System.out.println("name(Object API) = " + name);

	name = h.createQuery("select name from table001 where id = :id")
			.bind("id", 1)
			.map(StringMapper.FIRST)
			.first();
	System.out.println("name(Fluent API) = " + name);

	dao.close(); // ※3 本来必要無し
	h.close(); // ※4
}

前回同様、※1〜4 でデバッガで止めながら、接続状況を確認していってください。※1で1つ接続が増えますが、※2では増えないことが確認できると思います。その後、※3でその接続が閉じられて、※4では何も起きないでしょう。

本来、※3のcloseは必要無いです。というか close しちゃダメです。というのも、仮に Dao002 とか Dao003 とか他のDaoも同時に使用していた場合、それらのコネクションも同一なので、DBにアクセスできなくなっちゃいます