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


EzJDBCで利用する「テーブル情報クラス」と「エンティティ」を自動生成するEclipse plugin(TRYGENE)について説明したいと思います。

テーブル情報クラスは下記のソースのfromメソッドで設定する「CUSTOMER」であり、エンティティはfindメソッドで設定する「Customer」の事です。

  // テーブル情報インスタンスを生成
 CUSTOMER _CS = new CUSTOMER();
 // CUSTOMERテーブルを照会
 List<Customer> list = new EzJDBC().from(_CS).where(_CS.ADDRESS.like("TOKYO%")).find(Customer.class);

TRYGENプラグインは「テーブル定義書」を元に、下記の一連の処理を行いテーブル情報クラスとエンティティを作成します。

1.テーブル定義書からCREATE用DDLを作成 - (任意)
2.CREATE文発行 - (任意 - 既にテーブルが存在していた場合は、データをEXPORTしてテーブルをDROPします)
3.テーブル情報クラス作成
4.エンティティ作成


CUSTOMERテーブルより実際に作成する例を記述します。
テーブル定義書はExcelで作成します。。。(^^;)

例:お客様テーブル

テーブル名 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

注1:項目名や列名等を記述する位置はpluginで自由に設定可能です。
注2:複数テーブルを作成する場合は別シートに作成すればokです。

最終行の「エンティティ名」の行には、作成するEntityのクラス名を設定します。
また、「DDL」項目にtrueを設定することによりCREATE用DDLファイルが作成され、「CREATE」項目にtrueを設定することによりデータベースにCRETE文を発行します。
後は、Eclipse pluginを起動するだけです。対象となるテーブル定義書Excelファイルを選択して、pluginを起動すればok!

下記のテーブル情報クラスとエンティティがプロジェクト上に作成されます。

CUSTOMERテーブル情報クラス

 /**
  *<p>お客様(CUSTOMER)テーブルの項目情報および結合情報の設定クラス</p>
  * @author T.Ryoken
  * @version 1.00 2009/01/01 
  * @sinse 1.00
  */
 public class CUSTOMER extends EzTableInfo {
    /* TRYGEN_SOURCE_REPLACE_BEGIN */
    /** テーブル名 */
    public static final String TABLE_NAME = "CUSTOMER"; 
    /** ID */
    public IntegerType ID = new IntegerType(this.asName, "ID", 10).notNull().key(); 
    /** 名前 */
    public StringType NAME = new StringType(this.asName, "NAME", 100).notNull(); 
    /** 性別 */
    public StringType GENDER = new StringType(this.asName, "GENDER", 1).notNull(); 
    /** 年齢 */
    public IntegerType AGE = new IntegerType(this.asName, "AGE", 3).notNull(); 
    /** 住所 */
    public StringType ADDRESS = new StringType(this.asName, "ADDRESS", 200).notNull(); 
              ・
              ・
              ・
    /** 登録日 */
    public TimestampType CREATED = new TimestampType(this.asName, "CREATED ").notNull(); 
    /** バージョン */
    public IntegerType VERSION = new IntegerType(this.asName, "VERSION", 10).notNull(); 

    /**
     *<p>デフォルトコンストラクタ</p>
     */
    public CUSTOMER() {
       super(null,TABLE_NAME,TABLE_NAME);
    }
    /**
     *<p>コンストラクタ</p>
     * @param asName テーブル別名
     */
    public CUSTOMER(String asName) {
       super(null,TABLE_NAME,asName);
    }
    /**
     *<p>コンストラクタ</p>
     * @param parents 親テーブル情報
     * @param asName  テーブル別名
     */
    public CUSTOMER(EzTableInfo parents, String asName) {
       super(parents,TABLE_NAME,asName);
    }

    /* TRYGEN_SOURCE_REPLACE_FINAL */
 }

Customerエンティティ

 /**
  *<p>お客様(CUSTOMER)テーブルの1レコードの情報を格納するエンティティクラス</p>
  * @author T.Ryoken
  * @version 1.00 2009/01/01 
  * @sinse 1.00
  */
 public class Customer {
    /* TRYGEN_SOURCE_REPLACE_BEGIN */
    /** ID */
    public Integer id; 
    /** 名前 */
    public String name; 
    /** 性別 */
    public String gender; 
    /** 年齢 */
    public Integer age; 
    /** 住所 */
    public String address; 
              ・
              ・
              ・
    /** 登録日 */
    public Timestamp created; 
    /** バージョン */
    public IntegerType version; 

    /* TRYGEN_SOURCE_REPLACE_FINAL */
 }

テーブル情報クラス、エンティティクラスは共にテンプレート(TableInfoTemplate.txt,EntityTemplate.txt)を元に作成されます。このテンプレートは編集が自由にできますので、お好みの形でソースを生成して下さい。
例えば、エンティティをpublicフィールドでははなくprivateにしてアクセッサをつける等も自由に編集できます(^^)v


ちょーかんたんですね(^^)