S2JDBC-Genの紹介 その4 − 名前インタフェースの自動生成

前回のエントリでS2JDBC-Genで生成できるのは4種類のクラスといいましたが、1つ増えて5種類になりました。

  • エンティティクラス
  • (エンティティの)テストクラス
  • サービスクラス
  • 条件クラス
  • 名前インタフェース

追加したのは名前インタフェースです。

名前インタフェース

名前インタフェースはエンティティごとに作成され、エンティティのプロパティ名を定数として持ちます。たとえばこんな感じ。

/**
 * {@link Employee}のプロパティ名の集合です。
 * 
 * @author S2JDBC-Gen
 */
public interface EmployeeNames {

    /** {@link Employee#id}の名前 */
    public static final String id = "id";

    /** {@link Employee#firstName}の名前 */
    public static final String firstName = "firstName";

    /** {@link Employee#lastName}の名前 */
    public static final String lastName = "lastName";

    /** {@link Employee#departmentId}の名前 */
    public static final String departmentId = "departmentId";

    /** {@link Employee#addressId}の名前 */
    public static final String addressId = "addressId";

    /** {@link Employee#department}の名前 */
    public static final String department = "department";

    /** {@link Employee#address}の名前 */
    public static final String address = "address";
}


サービスクラスはこれをimplementsした形で出力されるようにしました(設定で変更可)。
そうするとこんなふうにいままで文字列を指定していた箇所をタイプセーフにしてS2JDBCを利用できるようになります(青字がインタフェースの定数を参照しています)。

public class EmployeeService extends AbstractService implements
        EmployeeNames {

    public List findByFirstName(String name) {
        return select().innerJoin(address).where(
                new SimpleWhere().eq(firstName, name)).getResultList();
    }
}