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にアクセスできなくなっちゃいます