2009-07-20

s2jdbcでタイプセーフなクエリを実現。たとえば外部参照データで条件指定。

エンティティクラスを作成しておけば、s2jdbc-genでエンティティ参照用の*Namesクラスを自動作成できる。
target=gen-ddl(default)

これを使用して文字列に頼らず、タイプセーフなクエリを作成できる。

使用するNamesクラスをstatic importする。
これはXxxServiceでは、対応するXxxNamesがよい。

where句を構成するため、Operationsクラスもstatic importする。

結合したテーブルの情報を条件にしたいときはinnerJoin等でまず結合する。
関連が1対多で多側を参照するときはinnerJoin(viewGroupList())などとする。
(1側ならinnerJoin(dept())などになる。)
多側のIDで絞り込みたいなら以下のようにする。
.where(viewGroupList().id(), viewId))

ポイントはDeptNames内のviewGroupList()を使用するってことだろう。

以下作成したサンプル
import static org.seasar.extension.jdbc.operation.Operations.*;
import static sastrutsSample.entity.DeptNames.*;

import sastrutsSample.entity.Dept;

public class DeptService extends AbstractService {

public List findByViewId(String viewId) {
return jdbcManager.from(Dept.class).innerJoin(viewGroupList())
.where(eq(viewGroupList().id(), viewId))
.getResultList();
}
}

0 件のコメント: