EzJDBCで取得列名を変更する方法。


EzJDBCでは、照会結果を格納するクラスは以下の2通り存在ます。

1.テーブルに対応したEntity(pluginにより自動生成される)
2.開発者によって作成されたBean

1.の場合はテーブル列名とEntityのプロパティ名(テーブル列名のキャメル記法)が一致しますが、2の場合は必ずしもテーブル列名とBeanのプロパティ名が一致するとは限りません。

その様な時のためにEzJDBCでは取得項目に別名をつける機能があります。

記述方法は以下の通りです。

CUSTOMERテーブルの列名

ID,NAME,GENDER,AGE,ADDRESS...CREATED,VERSION

照会結果を格納する開発者が作成したCustomer2.java

public class Customer2 {
  /** CUSTOMERのID */
  public int id;
  /** CUSTOMERのNAME */
  public String customerName; // テーブル列名とプロパティ名が異なる
  /** CUSTOMERのGENDER */
  public String gender
  /** CUSTOMERのVERSION */
  public long version;
}

CUSTOMERテーブルを照会し、結果を「Customer2.class」に格納するコード
この時CUSTOMERテーブルのNAMEの値をCustomer2のcustomerNameプロパティにマッピングさせる方法は下記の通りです。

// メインテーブル情報インスタンス生成
CUSTOMER CUS =new CUSTOMER();
// CUSTOMERテーブルを照会
List list = EzJDBC.from(CUS)
                  .addField(CUS.name.as("CUSTOMER_NAME"))
                  .where(CUS.name.like("%YOSHI%"))
                  .find(Customer2.class);

上記コードによって自動生成されるSQLは下記の通りです。

SELECT
 CUS.ID,
 CUS.NAME as customerName,
 CUS.GENDER,
 CUS.VERSION
FROM
 CUSTOMER CUS
WHERE
 CUS.NAME LIKE '%YOSHI%'

これで、Customer2のcustomerNameプロパティにCUSTOMERテーブルのNAMEの値がマッピングされます。。。


[追記]
こういう時にこそアノテーションの出番なのかなぁ(・・?