SQLの組み立て用APIを実装してみました
SNAPSHOTおいておきます。
使い方はこんな感じです。@Delegateと組み合わせて使うのがお奨めです。
SELECT
SelectBuilder builder = SelectBuilder.newInstance(config); builder.sql("select"); builder.sql("id").sql(","); builder.sql("name").sql(","); builder.sql("salary"); builder.sql("from Emp"); builder.sql("where"); builder.sql("name like ").param(String.class, "S%"); builder.sql("and"); builder.sql("age > ").param(int.class, 20); Emp emp = builder.getSingleResult(Emp.class); // 複数件の取得は getResultList で // List<Emp> list = builder.getResultList(Emp.class);
UPDATE
UpdateBuilder builder = UpdateBuilder.newInstance(config); builder.sql("update Emp"); builder.sql("set"); builder.sql("name = ").param(String.class, "SMIHT").sql(","); builder.sql("salary = ").param(BigDecimal.class, new BigDecimal("1000")); builder.sql("where"); builder.sql("id = ").param(int.class, 10); builder.execute();
INSERT
InsertBuilder builder = InsertBuilder.newInstance(config); builder.sql("insert into Emp"); builder.sql("(name, salary)"); builder.sql("values ("); builder.param(String.class, "SMITH").sql(", "); builder.param(int.class, 100).sql(")"); builder.execute();
DELETE
DeleteBuilder builder = DeleteBuilder.newInstance(config); builder.sql("delete from Emp"); builder.sql("where"); builder.sql("name = ").param(String.class, "aaa"); builder.sql("and"); builder.sql("salary = ").param(int.class, 10); builder.execute();
実際の利用例はこちらをどうぞ
- https://www.seasar.org/svn/doma/tags/1.8.0-SNAPSHOT-20100606/doma-tutorial/src/main/java/tutorial/dao/EmployeeDao.java
- https://www.seasar.org/svn/doma/tags/1.8.0-SNAPSHOT-20100606/doma-tutorial/src/main/java/tutorial/dao/EmployeeDaoDelegate.java
自前のAPIで処理することで、SQLのログや名前変換(カラム名とプロパティ名など)やドメインクラスの扱いを他の処理と統一できるのが利点です。(Spring JDBCやDbUtilsを使うとそのあたり自前で処理しなければいけない)