[seasar-s2dao-dev:252] Criteria
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2007年 5月 29日 (火) 15:50:04 JST
ひがです。
S2Dao用のCriteria APIを考えてみました。
empのほかにdept.dname, locを取得する例はこちら。
Criteria c = new Criteria();
c.select("e.*, d.dname, d.loc")
.from(Emp.class, "e");
.join("dept d");
List<Map> list = empDao.findAllByCriteria(c);
上記に
emp.salが1000以上、3000未満で、dept.locがnot nullという
条件を加える場合
Map w = new HashMap();
w.put("sal_GE", 1000);
w.put("sal_LE", 3000);
w.put("dept$loc_IS_NOT_NULL", true);
c.select("e.*, d.dname, d.loc")
.from(Emp.class, "e");
.join("dept d");
.where(w);
List<Map> list = empDao.findAllByCriteria(c);
条件がMapになっているのは、Dxoの新機能を見越してのことです。
Pageクラスに
searchSal_GET, searchSal_LT, searchDept$loc_IS_NOT_NULL
というプロパティある場合に、Dxoに
@Prefix("search");
Map convert(HogePage page);
のようなメソッドを定義しておくと、プロパティのprefixが
指定されているものだけを対象にして、prefixを除いた上で
Mapにコピーする機能が追加されます。
where()はSQL直指定もできるようにする予定。
where("e.sal >= ? or ...", args);
ポイントは、これまでのCriteria APIのように
がんばらないこと。
http://www.hibernate.org/hib_docs/reference/ja/html/
querycriteria.html
SQLに近いけど、JOINとWHERE区の組み立てのように
これまで面倒だったところが必要最小限になっていることです。
--
Yasuo Higa
[E-MAIL ADDRESS DELETED]
seasar-s2dao-dev メーリングリストの案内