[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 メーリングリストの案内