の続きです。
DBアクセス処理を実装していくにあたり、O/RマッパーのS2JDBCを本格的に使い始めました。
2/2~2/6
- 複数のスキーマからエンティティ自動生成
<project name="app-s2jdbc-gen"default="gen-ddl"basedir="."> <property name="schemaname"value="SCHEMA"/> <!--追加--> <target name="gen-entity"> <gen-entity ... schemaname="${schemaname}"<!--追加--> /> </target> </project>
@Entity @Table(schema="SCHEMA") public class User { ... }
- 複数の結合条件の記述
- @Joincolumnsアノテーションで、@Joincolumnアノテーションをまとめる
- 参考:S2JDBCで、結合カラムが複数ある場合のアノテーション (codeなにがし::SAStruts(Super Agile Struts)あれこれ)
@JoinColumns({ @JoinColumn(name="FOREIGN_ID", referencedColumnName="ID"), @JoinColumn(name="FOREIGN_SUB_ID", referencedColumnName="SUB_ID") })
- S2JDBC タイプセーフAPIの利用
- JSPのリンクの記述
- 「/app/module/list」と「/app/module/edit/1」
- 共通のメニューを持ちたい場合
通常のリンクだと、URLからの相対パスになってしまうのでリンクがずれてしまう。
<html:linkhref="./">機能TOPへ</html:link>
SAStruts拡張タグリブを用いることで、JSPファイルから見た相対パスになる
<s:linkhref="./">機能TOPへ</html:link>
SAStrutsには、Strutsのhtml:linkを継承したs:linkが用意されています。 href属性を設定するときに、コンテキストルートを自動的に補完させる場合に使います。パスを/ではじめた場合は、コンテキストルートからみたパスになります。パスが/ではじまっていない場合は、JSPからみたパスになります。
Super Agile Struts - Feature Reference
- DB2用ダイアレクトの種類
@Override public String convertLimitSql(String sql, int offset, int limit) { return convertLimitOnlySql(sql, offset + limit); }
- 共通のカラムの処理
- ユーザーコード、更新日付、プログラム名のカラムが全テーブルに存在
- ただし、それぞれのカラム名は各テーブル毎のプレフィックスが付いている
- 一箇所にまとめて書けないものかと思ったけど、挫折
- 各サービスにinsert()/update()をOverrideして書くことにした
- 各エンティティのフィールド名を同一にすれば、親クラスを作ることで可能?なのかも