もし毎回手動で自動生成ファイルに手を入れているなら、自動化できますよ〜
s2jdbc-genで自動生成されるentityですが、mysqlのtinyintがShort型で生成されたりして、微妙に使いにくかったりします。
そこで、自動生成されるentityやserviceをカスタマイズしてみることにしました。
s2jdbc-genプロジェクトをダウンロードする
http://s2container.seasar.org/2.4/ja/downloads.html
S2JDBC-Gen 2.4.45 ← ここからダウンロードする。
ダウンロード後、eclipseプロジェクトとしてインポートする。
(インポートの必要はありませんが、インポートした方が解りやすいです)
*.ftlファイルをコピーする
S2JDBC-Genのテンプレートは、配布ファイルのresources/tempaltesディレクトリ以下にあります。 エンティティクラスのテンプレートはjava/entity.ftlになります。 これをコピーして、修正を加えるのが良いでしょう。 テンプレートの記述方法についてはFreeMarker のドキュメントを参照してください。
http://s2container.seasar.org/2.4/ja/s2jdbc_gen/tasks/gen_entity.html
とのことです。配布ファイルって何?と思いますが、要はs2jdbc-genのプロジェクトのソースのことですね。
今回は直接entity.ftlを修正してしまいます。
直接と言ってもoverride扱いになるので、不要になればプロジェクトから削除すれば、内蔵のftlファイルが使用されます。
以下のファイルをプロジェクトにコピーします。
↑これを、自動生成するプロジェクトに、以下のようにコピーします。
entity.ftlを修正する
↑ここにあるentity.ftlを以下のように書き換えて、ShortをIntegerに、byte[]をStringに書き換えてみます。
<#if useAccessor>private<#else>public</#if> ${attr.attributeClass.simpleName} ${attr.name};
↓以下のように書き換える。
<#if attr.attributeClass.simpleName == "Short"> <#if useAccessor>private<#else>public</#if> Integer ${attr.name}; <#elseif attr.attributeClass.simpleName == "byte[]"> <#if useAccessor>private<#else>public</#if> String ${attr.name}; <#else> <#if useAccessor>private<#else>public</#if> ${attr.attributeClass.simpleName} ${attr.name}; </#if>
gen-entityタスクを実行して確認する
カスタマイズしたテンプレートでgen-entityを実行し、entityをチェックします。
左が修正前、右が修正後です。
それぞれのテンプレートファイルと、生成されるファイルの対応は以下の通り。
entity.ftl → entity
names.ftl → entityNames
service.ftl → service
entitytest.ftl → entityTest
servicetest.ftl → serviceTest
私的には@Generatedのタイムスタンプが邪魔でしょうがないので、削除しました。
結構自動生成し直す機会があって、timestampの部分だけ常に変化するから、svnで差分扱いされてしまうのです。timestamp部分しか差分無くても・・
なるべくsvnで差分があるファイルだけをコミットしたいから、timestampが邪魔なのです。
timestampしか差分が無いファイルを、コミット対象から手動で除外していく無意味な作業から、開放されましょう!
@Generated(value = {<#list generatedInfoList as info>"${info}"<#if info_has_next>, </#if></#list>}, date = "${currentDate?datetime}")
以下のように書き換える。
@Generated(value = {<#list generatedInfoList as info>"${info}"<#if info_has_next>, </#if></#list>})
カラム名のprefix・suffixによって独自のアノテーションを付与するなど、カスタマイズし放題です!
今回は修正していませんが、タブではなく半角スペースでインデントされているので、タブに直したり、社内で使用しているコードフォーマッターを実行しても差分が無いよう、チマチマ修正するといいかと思います。