About

ドキュメント

Javadoc

モジュール

プロジェクト文書

Built by Maven

説明

概要

名前クラス(Namesクラス)を生成します。 名前クラスとは、エンティティのプロパティ名に対応するメソッドをもつクラスで、エンティティクラスにつき1つ生成されます。 名前クラスはタイプセーフな問い合わせを実現するために主にサービスクラス(Serviceクラス)から利用されます。 サービスクラスとは、Gen-Service タスクによって生成されるクラスです。 タイプセーフな問い合わせの詳細はタイプセーフAPI を参照してください。

このタスクは、例えば、次のようなコードを生成できます。

/**
 * {@link Address}のプロパティ名の集合です。
 * 
 * @author S2JDBC-Gen
 */
public class AddressNames {

    /**
     * idのプロパティ名を返します。
     * 
     * @return idのプロパティ名
     */
    public static PropertyName<Integer> id() {
        return new PropertyName<Integer>("id");
    }

    /**
     * cityのプロパティ名を返します。
     * 
     * @return cityのプロパティ名
     */
    public static PropertyName<String> city() {
        return new PropertyName<String>("city");
    }

    /**
     * employeeのプロパティ名を返します。
     * 
     * @return employeeのプロパティ名
     */
    public static _EmployeeNames employee() {
        return new _EmployeeNames("employee");
    }

    /**
     * @author S2JDBC-Gen
     */
    public static class _AddressNames extends PropertyName<Address> {

        /**
         * インスタンスを構築します。
         */
        public _AddressNames() {
        }

        /**
         * インスタンスを構築します。
         * 
         * @param name
         *            名前
         */
        public _AddressNames(final String name) {
            super(name);
        }

        /**
         * インスタンスを構築します。
         * 
         * @param parent
         *            親
         * @param name
         *            名前
         */
        public _AddressNames(final PropertyName<?> parent, final String name) {
            super(parent, name);
        }

        /**
         * idのプロパティ名を返します。
         *
         * @return idのプロパティ名
         */
        public PropertyName<Integer> id() {
            return new PropertyName<Integer>(this, "id");
        }

        /**
         * cityのプロパティ名を返します。
         *
         * @return cityのプロパティ名
         */
        public PropertyName<String> city() {
            return new PropertyName<String>(this, "city");
        }

        /**
         * employeeのプロパティ名を返します。
         * 
         * @return employeeのプロパティ名
         */
        public _EmployeeNames employee() {
            return new _EmployeeNames(this, "employee");
        }
    }
}

これはエンティティクラスAddressに対する名前クラスです。

名前クラスのメソッドは、static importの機能を使って呼び出されることを想定しています。 static importを利用した名前クラスの使用例は次のようになります。

List<Address> list = jdbcManager
    .from(Address.class)
    .innerJoin(employee())
    .where(eq(city(), "TOKYO"))
    .getResultList();

employee()とcity()が名前クラスのメソッドです。

名前クラスは、エンティティクラスの修正のたびに自動生成するようにしてください。

パラメータ

Antタスクへのパラメータを以下に示します。

トップレベルのパラメータ

属性 説明 デフォルト値 必須
classpathDir エンティティクラスを含むクラスパスのディレクトリです。このディレクトリはタスクの実行時のクラスパスに含まれている必要があります。 - YES
rootPackageName ルートパッケージ名です。 "" NO
entityPackageName エンティティクラスのパッケージ名です。エンティティクラスは、rootPackageNameとこの値をピリオドで連結したパッケージに配置されているとみなされます。 "entity" NO
entityClassNamePattern このタスクで対象とするエンティティクラス名の正規表現です。 ".*" NO
ignoreEntityClassNamePattern このタスクで対象としないエンティティクラス名の正規表現です。 "" NO
namesPackageName 名前クラスのパッケージ名です。名前クラスは、rootPackageNameとこの値をピリオドで連結したパッケージに配置されます。 "entity" NO
namesClassNameSuffix 名前クラス名のサフィックスです。 "Names" NO
namesTemplateFileName 名前クラスのテンプレートファイル名です。 "java/names.ftl" NO
generateNamesAggregateClass "true"の場合、名前集約クラスを生成します。 "true" NO
namesAggregateShortClassName 名前集約クラスの単純名です。 "Names" NO
namesAggregateTemplateFileName 名前集約クラスのテンプレートファイル名です。 "java/names-aggregate.ftl" NO
templateFileEncoding テンプレートファイルのエンコーディングです。 "UTF-8" NO
templateFilePrimaryDir テンプレートファイルを検索する際の優先ディレクトリです。 - NO
javaFileDestDir Javaファイルの出力先ディレクトリです。 "src/main/java" NO
javaFileEncoding Javaファイルのエンコーディングです。 "UTF-8" NO
overwrite "true"の場合、名前インタフェースのJavaファイルを上書きします。 "true" NO
configPath JdbcManagerのコンポーネント定義を含む設定ファイルです。このタスクの実行に使用されます。 "s2jdbc.dicon" NO
env 環境名です。 "ut" NO
jdbcManagerName JdbcManagerのコンポーネント名です。接続先のデータベースはJdbcManagerのコンポーネント名によって決まります。 "jdbcManager" NO
factoryClassName S2JDBC-Genの公開されたインタフェースの実装を作成するファクトリのクラス名です。S2JDBC-Genをカスタマイズする場合に独自のファクトリクラスを指定できます。ここに指定するクラスはorg.seasar.extension.jdbc.gen.internal.factory.Factoryインタフェースを実装している必要があります。 "org.seasar.extension.jdbc.gen
.internal.factory.FactoryImpl"
NO
commandInvokerClassName S2JDBC-Genのコマンドを呼び出すクラスの名前です。コマンドの呼び出し前後で任意の処理を実行したい場合に指定します。ここに指定するクラスはorg.seasar.extension.jdbc.gen.command.CommandInvokerインタフェースを実装している必要があります。 "org.seasar.extension.jdbc.gen
.internal.command.CommandInvokerImpl"
NO
classpath このタスクを実行する際のクラスパスです。 - classpathrefが指定されていない場合YES
classpathref このタスクを実行する際のクラスパスの参照です。 - classpathが指定されていない場合YES

ネストした要素として指定されるパラメータ

jvmArg

このタスクの大部分の処理は別VMで行われます。VMに引数を渡す場合は<jvmarg>要素を使用します。 これはAntのJavaタスクで使用できる<jvmarg>と同じです。 使用可能な属性やネストした要素についてはAntのドキュメントを参照してください。

名前クラスのパッケージを指定する

名前クラスのデフォルトのパッケージ名は"entity"ですが、namesPackageName属性に任意のパッケージ名を指定できます。 次の例では"names"を指定しています。

<gen-names
    classpathDir="build/classes"
    rootPackageName="examples"
    namesPackageName="names"
    classpathRef="classpath"
/>

独自のテンプレートファイルを使用する

任意のディレクトリに独自のテンプレートファイルを置き、templateFilePrimaryDir属性にそのディレクトリを指定することで、 独自のテンプレートファイルを使用できます。

S2JDBC-Genのテンプレートは、配布ファイルのresources/tempaltesディレクトリ以下にあります。 名前クラスのテンプレートはjava/names.ftlになります。 これをコピーして、修正を加えるのが良いでしょう。 テンプレートの記述方法についてはFreeMarker のドキュメントを参照してください。

テンプレートファイルを格納するディレクトリをmytempletesとする場合、 修正した独自テンプレートを使用するにはテンプレートをmytempletes/java/names.ftlと配置し、templateFilePrimaryDir属性にmytempletesを指定します。

<gen-names
    classpathDir="build/classes"
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    classpathRef="classpath"
/>

mytempletes/my-names.ftlのように、テンプレートファイルを任意の名前で配置したい場合は、 templateFilePrimaryDir属性に加え、namesTemplateFileName属性も指定します。

<gen-names
    classpathDir="build/classes"
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    namesTemplateFileName="my-names.ftl"
    classpathRef="classpath"
/>

生成するJavaファイルに共通のヘッダーとしてコピーライトを含める

lib.ftlというファイルを作成し、これをtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにcopyrightの定義をします。

<#assign copyright>
/*
 * Copyright 2008-2009 ...
 * All rights reserved.
 */
</#assign>
mytempletes/lib.ftlと配置する場合、タスクの定義は次のようになります。

<gen-names
    classpathDir="build/classes"
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    classpathRef="classpath"
/>

copyright.ftlにコピーライトを記述することもできます(過去バージョンとの互換機能として残されています)。 copyright.ftlを使う場合は、#assignタグを使わずコピーライトのみを指定してください。 lib.ftlと同様、copyright.ftlはtemplateFilePrimaryDir属性に指定するディレクトリに配置する必要があります。

生成するJavaファイルにauthorを指定する

lib.ftlというファイルを作成し、これをtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにauthorの定義をします。

<#assign author="Nakamura">
mytempletes/lib.ftlと配置する場合、タスクの定義は次のようになります。

<gen-names
    classpathDir="build/classes"
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    classpathRef="classpath"
/>

名前集約クラスを利用する

名前集約クラスをstatic importすると、個々の名前クラスを選択的にstatic importする手間が省けます。 名前集約クラスは名前クラスをstaticなメソッドで提供するためです。 名前集約クラスは、名前クラスが生成されるパッケージと同じパッケージに自動で生成されます。 クラスのデフォルトの単純名は「Names」です。この名前はnamesAggregateClassSimpleName属性で変更できます。

名前集約クラスを利用すると、概要 の例は次のようになります。

List<Address> list = jdbcManager
    .from(Address.class)
    .innerJoin(address().employee())
    .where(eq(address().city(), "TOKYO"))
    .getResultList();
address()が名前集約クラスのstaticなメソッドです。