EzJDBCのscaffold(プラグイン)です!vol.2

EzJDBCで利用する「テーブル情報クラス」の結合(JOIN)の設定の仕方について説明したいと思います。

結合(JOIN)の設定は、前回説明したテーブル定義書に付加情報をつけるだけでokです。


前回は下記の「お客様(CUSTOMER)テーブル」定義書を作成しました。

例:お客様テーブル

テーブル名 CUSTOMER お客様テーブル
SEQ 項目名 列名 属性 P/K 必須 LENGTH ...      
1 ID ID INTEGER TRUE TRUE 10    
2 名前 NAME CHAR   TRUE 100    
3 性別 GENDER CHAR   TRUE 1    
4 年齢 AGE INTEGER   TRUE 3    
5 住所 ADDRESS CHAR   TRUE 200    
.                
.                
.                
29 登録日 CREATED TIMESTAMP          
30 バージョン VERSION INTEDER   TRUE 10    
エンティティ名 jp.co.xxx.yyy.zzz.Customer DDL TRUE CREATE TRUE

今回は、このテーブル定義書に結合条件を追記します。
まず、Excelファイルを右にスクロールさせます。


すると下記の画面になります。

結合設定
TABLE ORDER
別名 OD
テーブル名 CUSTOMER 比率 ONE TO MANY
SEQ 項目名 列名 SEQ 列名
1 ID ID CUSTOMER_ID
2 名前 NAME    
3 性別 GENDER    
4 年齢 AGE    
5 住所 ADDRESS    
.        
.        
.        
29 登録日 CREATED    
30 バージョン VERSION    

結合設定が複数ある場合は、横に続けて設定すればokです...スマートじゃない...(^^;)
また、CUSTOMERに設定した内容はリバース情報としてORDERテーブル情報クラスにも反映されます...やさしー(^^)
ここまでの設定が出来たら前回説明した「scaffold(プラグイン)」を実行します。

既に作成済みの場合でも問題ありません。内容は最新の情報に置き換わります。

作成後に手をいれたソースもソース中「/* TRYGEN_SOURCE_REPLACE_BEGIN */」から「/* TRYGEN_SOURCE_REPLACE_FINAL */」コメント外に記述されていれば問題ありません。
詳細は下記を参照してくださいm(__)m

EzJDBCのEntity自動生成機能

EzJDBCでは、テーブル・メタデータから「Entity」を自動生成するscaffoldを用意しました。
EzJDBCでは、テーブルの変更はDBA行うべきという方針のもと(不在の場合はPG自身が行う事になる?)、テーブルに変更が生じた場合は、テーブルの変更(再作成)を行った上で、Entityの再作成(自動生成)することになります。
中略...
http://d.hatena.ne.jp/trygun/20090821#1250822512

scaffoldを実行すると下記の「テーブル情報クラス」が作成されます。

 public class CUSTOMER extends EzTableInfo {
   /* TRYGEN_SOURCE_REPLACE_BEGIN */
   /** テーブル名 */
   public static final String TABLE_NAME = ""CUSTOMER";
   /** ID */
   public IntegerType ID = new IntegerType(this.alias, "ID", 10).notNull().key();
   /** 名前 */
   public StringType NAME = new StringType(this.alias, "NAME", 100).notNull();
   /** 性別 */
   public StringType GENDER = new StringType(this.alias, "GENDER", 1).notNull();
   /** 年齢 */
   public IntegerType AGE = new IntegerType(this.alias, "AGE", 3).notNull();
   /** 住所 */
   public StringType ADDRESS = new StringType(this.alias, "ADDRESS", 200).notNull();
         ...
   /** 登録日 */
   public TimestampType CREATED = new TimestampType(this.alias, "CREATED ").notNull();
   /** バージョン */
   public IntegerType VERSION = new IntegerType(this.alias, "VERSION", 10).notNull();

   // 結合条件設定
   /** ORDERテーブル結合情報 */
   public ORDER _OD;

   /**コンストラクタ*/
   public CUSTOMER() {
      super(null,TABLE_NAME,TABLE_NAME);
   }
   /**コンストラクタ(alias テーブル別名)*/
   public CUSTOMER(String alias) {
      super(null,TABLE_NAME,alias);
   }
   /**コンストラクタ(parents 親テーブル情報,alias テーブル別名)*/
   public CUSTOMER(EzTableInfo parents, String alias) {
    super(parents,TABLE_NAME,alias);
   }

   /**各テーブルとの結合条件インスタンスをセットします*/
   public void join() {
      // ORDERテーブルがCUSTOMER(自分自身)の親テーブルとして利用されているかをチェック
      if(!isPearents(_ORDER.class)) {
         // ORDERテーブル結合条件を生成
         this._OD = new ORDER(this, "OD");
         // CUSTOMERとORDERの結合条件をセット
         this._OD.set(this.ID, this._OD.CUSTOMER_ID);
      }
   }

   /* TRYGEN_SOURCE_REPLACE_FINAL */
 }

これで結合条件も簡単に設定できました。

利用する場合も以下のような感じです。

 // テーブル情報インスタンスを生成
 CUSTOMER _CS = new CUSTOMER();
 // CUSTOMERとORDERを結合した結果を照会
 List list = EzJDBC().from(_CS._DS).where(_CS.ADDRESS.like("TOKYO%")).find(Customer.class);