はじめてのSAStruts 5週目

はじめてのSAStruts 4週目 - 130単位

の続きです。

DBアクセス処理を実装していくにあたり、O/RマッパーのS2JDBCを本格的に使い始めました。

2/2~2/6

  • 複数のスキーマからエンティティ自動生成
    • スキーマ毎にxml定義を作成してみる
    • 「schemaname」に対象のスキーマ名を記述
    • Gen-Entityのみで、他のタスク(Geb-Namesとか)には不要
    • それぞれのxmlAnt実行
      • (ただし基本的に最初の1回しか実行しないため、1ファイルで都度書き換えればよいのかも)
    • DDL生成時(Gen-DDL)は、1つのxmlを実行すればよい(エンティティでの指定が必要(後述))
    • 参考:Seasar2 - S2JDBC-Gen - Gen-Entity

s2jdbc-gen-build.xml

<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(name="FOREIGN_ID", referencedColumnName="ID"),
    @JoinColumn(name="FOREIGN_SUB_ID", referencedColumnName="SUB_ID")
})
  • JSPのリンクの記述
    • 「/app/module/list」と「/app/module/edit/1」
    • 共通のメニューを持ちたい場合

通常のリンクだと、URLからの相対パスになってしまうのでリンクがずれてしまう。

<html:linkhref="./">機能TOPへ</html:link>

SAStruts拡張タグリブを用いることで、JSPファイルから見た相対パスになる

<s:linkhref="./">機能TOPへ</html:link>

SAStrutsには、Strutshtml:link継承したs:linkが用意されています。 href属性を設定するときに、コンテキストルートを自動的に補完させる場合に使います。パスを/ではじめた場合は、コンテキストルートからみたパスになります。パスが/ではじまっていない場合は、JSPからみたパスになります。

Super Agile Struts - Feature Reference
  • DB2用ダイアレクトの種類
    • Db2GenDialect、Db2390GenDialect、Db2400GenDialectがある
    • AS400にはDb2400GenDialectを用いるっぽい
    • DB2は詳しくないが、どうもoffsetが使えないように見受けられる

▼Db2390GenDialect *1

@Override
public String convertLimitSql(String sql, int offset, int limit) {
	return convertLimitOnlySql(sql, offset + limit);

}
  • 共通のカラムの処理
    • ユーザーコード、更新日付、プログラム名のカラムが全テーブルに存在
    • ただし、それぞれのカラム名は各テーブル毎のプレフィックスが付いている
    • 一箇所にまとめて書けないものかと思ったけど、挫折
    • 各サービスにinsert()/update()をOverrideして書くことにした
    • 各エンティティのフィールド名を同一にすれば、親クラスを作ることで可能?なのかも
原文地址:https://www.cnblogs.com/aggavara/p/2708704.html