S2JDBC-Genの紹介 その3 − サービスクラスと条件クラスの自動生成

S2JDBC-Genはエンティティクラスやテストクラスのほかにエンティティのサービスクラスや条件クラスも作成できます。

サービスクラス

サービスクラスはgen-serviceというAntタスクで生成できます。ここでいうサービスクラスはエンティティに対応するビジネスロジックをもつクラスです。

build.xmlの定義(抜粋)

gen-serviceタスクを使うにはこんな感じの記述をします。

<gen-service
    classpathdir="build/classes"
    rootpackagename="example"
    classpathref="classpath"
/>
生成されるコードの例

生成されるのはこんな感じのクラスです。

/**
 * {@link Employee}のサービスクラスです。
 * 
 * @author S2JDBC-Gen
 */
public class EmployeeService extends S2AbstractService<Employee> {

    /**
     * 識別子でエンティティを検索します。
     * 
     * @param id
     *            識別子
     * @return エンティティ
     */
    public Employee findById(Integer id) {
        return select().id(id).getSingleResult();
    }
}

条件クラス

条件クラスはgen-conditionというAntタスクで生成できます。条件クラスは検索条件をタイプセーフに組み立てることをサポートします。

build.xmlの定義(抜粋)

gen-conditionタスクを使うにはこんな感じの記述をします。

<gen-condition
    classpathdir="build/classes"
    rootpackagename="example"
    classpathref="classpath"
/>
使い方の例

これはクラスのコードを見るより使い方を見てもらったほうがわかりやすいでしょう。whereメソッドに渡しているEmployeeConditionというクラスが条件クラスです。

List<Employee> list = jdbcManager.from(Employee.class).where(
    new EmployeeCondition().name.starts("S").or().name
        .starts("T")).getResultList();

newするとプロパティをたどって条件を指定できます。orもサポートされています。

List<Employee> list = jdbcManager.from(Employee.class).innerJoin(
    "address").where(
    new EmployeeCondition().address().city.eq("TOKYO"))
    .getResultList();

関連先のプロパティを指定することもできます。

検索条件を組み立てるのに文字列は嫌、SimpleWhereでも物足りないという人には便利だと思います。

まとめると

S2JDBC-Genで生成できるのは4種類のクラスです。

  • エンティティクラス
  • (エンティティの)テストクラス
  • サービスクラス
  • 条件クラス

S2JDBC-Genの中でクラスの生成はどちらかというとおまけ機能です。
次回からは中心機能のDDLの生成やマイグレーション機能を紹介します。