説明
概要
SQLファイルの定数クラスを作成します。 ここでのSQLファイルとは、JdbcManagerのSQLファイルによる操作 で使用されるSQLファイルを指します。
例えば、次のようなコードを生成できます。
/**
* SQLファイルの定数クラスです。
*
*/
public final class SqlFiles {
/**
* {@code META-INF/sql/Address/getStreet.sql}の定数です。
*/
public static final String ADDRESS_GET_STREET = "META-INF/sql/Address/getStreet.sql";
/**
* {@code META-INF/sql/Employee/updateEmployeeName.sql}の定数です。
*/
public static final String EMPLOYEE_UPDATE_EMPLOYEE_NAME = "META-INF/sql/Employee/updateEmployeeName.sql";
}
定数クラスを使用することで、 JdbcManagerのSQLファイルによる操作 において存在しないパスを指定してしまうなどのミスを防げます。
定数クラスは次のように使用できます。
int count = jdbcManager.updateBySqlFile(
SqlFiles.EMPLOYEE_UPDATE_EMPLOYEE_NAME, param)
.execute();
パラメータ
Antタスクへのパラメータを以下に示します。
トップレベルのパラメータ
| 属性 | 説明 | デフォルト値 | 必須 |
|---|---|---|---|
| classpathDir | エンティティクラスを含むクラスパスのディレクトリです。このディレクトリはタスクの実行時のクラスパスに含まれている必要があります。 | - | YES |
| rootPackageName | ルートパッケージ名です。 | "" | NO |
| subPackageName | 定数クラスのサブパッケージ名です。定数クラスは、rootPackageNameとこの値をピリオドで連結したパッケージに配置されているとみなされます。この値が空文字の場合は、定数クラスは、rootPackageNameで表されるパッケージに配置されているとみなされます。 | "" | NO |
| shortClassName | 定数クラスの単純名です。 | "SqlFiles" | NO |
| sqlFileConstantNamingRuleClassName | SQLファイルの定数の名前付けルールを表すクラスの名前です。ここに指定するクラスはorg.seasar.extension.jdbc.gen.model.SqlFileConstantNamingRuleインタフェースを実装している必要があります。 | "org.seasar.extension.jdbc.gen.internal.model.SqlFileConstantNamingRuleImpl" | NO |
| templateFileName | テストクラスのテンプレートファイル名です。 | "java/sqlfileconstants.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のコンポーネント定義を含む設定ファイルです。このタスクの実行に使用されます。また、テストコードではこの設定ファイルがincludeされます。 | "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 |
例
SQLファイルを指定する
SQLファイルを指定するには、<SqlFileSet>を使用します。 SQLファイルはclasspathDir属性に指定されるディレクトリ以下に存在している必要があります。
<gen-sqlfileconstants
classpathDir="build/classes"
rootpackagename="examples"
classpathref="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
上記の定義を利用すると、META-INF/sqlディレクトリ以下の「.sql」という拡張子を持つファイルが対象になります。
独自のテンプレートファイルを使用する
任意のディレクトリに独自のテンプレートファイルを置き、templateFilePrimaryDir属性にそのディレクトリを指定することで、 独自のテンプレートファイルを使用できます。
S2JDBC-Genのテンプレートは、配布ファイルのresources/tempaltesディレクトリ以下にあります。 SQLファイルのテストクラスのテンプレートはjava/sqlfileconstants.ftlになります。 これをコピーして、修正を加えるのが良いでしょう。 テンプレートの記述方法についてはFreeMarker のドキュメントを参照してください。
テンプレートファイルを格納するディレクトリをmytempletesとする場合、 修正した独自テンプレートを使用するにはテンプレートをmytempletes/java/sqlfileconstants.ftlと配置し、templateFilePrimaryDir属性にmytempletesを指定します。
<gen-sqlfileconstants
classpathDir="build/classes"
rootPackageName="examples"
templateFilePrimaryDir="mytempletes"
classpathRef="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
mytempletes/my-sqlfileconstants.ftlのように、テンプレートファイルを任意の名前で配置したい場合は、 templateFilePrimaryDir属性に加え、templateFileName属性も指定します。
<gen-sqlfileconstants
classpathDir="build/classes"
rootPackageName="examples"
templateFilePrimaryDir="mytempletes"
templateFileName="my-sqlfileconstants.ftl"
classpathRef="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
生成するJavaファイルに共通のヘッダーとしてコピーライトを含める
lib.ftlというファイルを作成し、これをtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにcopyrightの定義をします。
<#assign copyright> /* * Copyright 2008-2009 ... * All rights reserved. */ </#assign>
<gen-sqlfileconstants
classpathDir="build/classes"
rootPackageName="examples"
templateFilePrimaryDir="mytempletes"
classpathRef="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
copyright.ftlにコピーライトを記述することもできます(過去バージョンとの互換機能として残されています)。 copyright.ftlを使う場合は、#assignタグを使わずコピーライトのみを指定してください。 lib.ftlと同様、copyright.ftlはtemplateFilePrimaryDir属性に指定するディレクトリに配置する必要があります。
生成するJavaファイルにauthorを指定する
lib.ftlというファイルを作成し、これをtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにauthorの定義をします。
<#assign author="Nakamura">
<gen-sqlfileconstants
classpathDir="build/classes"
rootPackageName="examples"
templateFilePrimaryDir="mytempletes"
classpathRef="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
定数の名前付けルールを変更する
デフォルトの名前付けルールは、SQLファイルのディレクトリ名とファイル名をキャメルケースから大文字のアンダースコア(_)区切りに変換し、 両者をアンダースコア(_)で連結したものを定数名とします。
この名前付けルールを変更するには、org.seasar.extension.jdbc.gen.model.SqlFileConstantNamingRuleインタフェースを実装したクラスを作成し、 クラス名をsqlFileConstantNamingRuleClassName属性に指定します。
example.MySqlFileConstantNamingRuleというクラスを作成した場合、次のように指定します。
<gen-sqlfileconstants
classpathDir="build/classes"
rootPackageName="examples"
sqlFileConstantNamingRuleClassName="example.MySqlFileConstantNamingRule"
classpathRef="classpath">
<sqlfileset dir="build/classes">
<include name="META-INF/sql/**/*.sql" />
</sqlfileset>
</gen-sqlfileconstants>
