LoginSignup
3
4

More than 5 years have passed since last update.

Mybatis Generatorでimmutableなクラスを生成

Last updated at Posted at 2015-12-21

Mybatis Generatorでimmutableなクラスとなるように、コード生成をするやり方です。

コンストラクタによるマッピング + setterなし

公式サイトでやり方はでていますが、constructorBasedにし、immutableにすると、コンストラクタのみがフィールドの値を設定できるようなクラスを生成するようになります。

generatorConfig.xml
 <javaModelGenerator targetPackage="entity" targetProject="src\main\java">
        <property name="constructorBased" value="true"/>
        <property name="immutable" value="true"/>
 </javaModelGenerator>

 <table tableName="">
     <property name="modelOnly" value="true"/> // モデルクラスと対応するxmlファイルだけ生成
         <property name="useActualColumnNames" value="false"/> //snake_caseのカラム名をcamelCaseのフィールド名にマッピング
</table>

サンプル

例えば、id,nameというカラムを持つUserテーブルに対しては、次のようなxmlファイルとjavaファイルが生成されます。

UserMapper.xml
<resultMap id="BaseResultMap" type="entity.User" >
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->
    <constructor >
      <arg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
      <arg column="name" jdbcType="NVARCHAR" javaType="java.lang.String" />
    </constructor>
  </resultMap>
User.java
public class User{
    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column User.id
     *
     * @mbggenerated
     */
    private Integer id;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column User.name
     *
     * @mbggenerated
     */
    private String name;

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table FUNCTION_CODE_MASTER
     *
     * @mbggenerated
     */
    public FunctionCodeMaster(Integer id, String name) {
        this.id= id;
        this.name= name;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column User.id
     *
     * @return the value of User.id
     *
     * @mbggenerated
     */
    public String getId() {
        return id;
    }

    /**
     * This method was generated by MyBatis Generator.
     * This method returns the value of the database column User.name
     *
     * @return the value of User.name
     *
     * @mbggenerated
     */
    public String getName() {
        return name;
    }

どういうときに使う?

コード値のテーブルやマスタ系など、いわゆる参照にしか使わないテーブルです。
意図しないタイミングで編集されたくないので、最初からimmutableにしておくて便利です。
表示させるときに何かしらの整形する場合は、そのためのDTOを用意するか、SQLで整形した結果をビューにして、そのビューからコード生成をさせるなどをしています。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4