技術関連の覚書

案件でやったり自宅で試したことの覚書

MyBatis

ファイル構成

種類 クラス名パターン 役割 ジェネレータで生成するもの 注意点
エンティティ テーブル名のキャメルケース テーブル項目の内容を保持するためのbean テーブル項目名に該当するフィールド、getter、setter キー項目はKeyクラスに実装
キー エンティティ+Key テーブルのキー項目の内容を保持するためのbean キー項目に該当するフィールド、getter、setter エンティティの親クラス
Example エンティティ+Example エンティティに対する条件などを保持する 条件式の実装はサブクラスのCriteriaに設定する
Mapper エンティティ+Mapper SQL文とマッピングするためのインタフェース update,insert,selectByExample,selectByPrimaryKey

エンティティの結合

結合エンティティ

全項目列挙→契約エンティティ、契約異動履歴エンティティクラスのフィールドとgetter,setterに変更

結合エンティティMapper.xml

SQLのSELECTをエイリアス.項目名 エイリアス_項目名 で列挙して、すべての項目に別名を作成 resultMapタグ内を以下のように設定 共通IDフィールドは各テーブルに持つ共通の項目となるもの エンティティのresultMapは外部参照ができるので 1対多の場合はcollectionタグを使う collectionにはofTypeにリスト要素の型を指定する

<mapper namespace="jp.example.exex.data.mapper.BindMapper" >
  <resultMap id="結合ResultMap" type="パッケージ.結合エンティティ" >
    <id property="共通IDフィールド1" column="共通IDカラム1"/>
    <association property="t1" columnPrefix="t1_" javaType="パッケージ.エンティティ1" resultMap="マッパー名1.リザルトマップ名"/>
    <association property="t2" columnPrefix="t2_" javaType="パッケージ.エンティティ2" resultMap="マッパー名2.リザルトマップ名"/>
    <collection property="t3" ofType="エンティティ3" columnPrefix="t3_" javaType="パッケージ.エンティティ3" resultMap="マッパー名3.リザルトマップ名"/>
  </resultMap>
  <sql id="t1Columns">
    t1.共通IDカラム 共通IDカラム,
    t1.IDカラム1 t1_IDカラム1, t1.IDカラム2 t1_IDカラム2, t1.IDフィールド t1_フィールド, ...
  </sql>
  <sql id="t2Columns">
    t2.IDカラム1 t2_IDカラム1, t2.IDカラム2 t2_IDカラム2, t2.IDカラム3 t2_IDカラム3, t2.IDフィールド t2_フィールド, ...
  </sql>
  <sql id="t3Columns">
    t3.IDカラム1 t3_IDカラム1, t3.IDカラム2 t3_IDカラム2, t3.IDカラム3 t3_IDカラム3, t3.IDフィールド t3_フィールド, ...
  </sql>
  <select id="selectマッパーメソッド名" resultMap="結合ResultMap">
    SELECT
      <include refid="t1Columns"/>,
      <include refid="t2Columns"/>
    FROM
      テーブル1 t1,テーブル2 t2
      ...
  </select>
   :

エンティティクラスの実装

public class BindEntity {
    /** 共通のIDカラムの型 */
    private DataType id;
    /** T1テーブルエンティティオブジェクト */
    private T1 t1;
    /** T2テーブルエンティティオブジェクト */
    private T2 t2;
    /** T3エンティティのリスト */
    private List<T3> t3List;

    // それぞれのgetter,setter
}

resultMapは結合エンティティのリストへ設定 テーブル内容のマッピングはassociationのプロパティで設定したフィールド名とjavaTypeで指定した型でcolumnPrefixで指定したプレフィックスを持つ項目をエンティティオブジェクトへ挿入する