- 開発技術
【MyBatis-Plus】カラムとフィールドの対応について
- #MyBatis-Plus
- #SpringBoot
- #Java
この記事を書いたチーム:tenko

目次
はじめに
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
本記事では、MyBatis-Plusにおけるテーブルのカラムとエンティティクラスのフィールドの対応について紹介します。
関連するMyBatis-Plusの設定
カラムとフィールドの対応に関連するMyBatis-Plusの設定があります。
- mapUnderscoreToCamelCase(デフォルト値:true)
- データベースのカラム名 A_COLUMN (スネークケース) からJavaのフィールド名 aColumn (キャメルケース) への自動マッピングを有効にする。
SQL文の生成にもこの設定が適用される。
- MyBatisのデフォルト値は false
- capitalMode(デフォルト値:false)
- テーブル名とフィールド名の大文字・小文字を区別する。
※本記事では、MyBatis-Plusのデフォルトの設定を前提として説明します。
フィールド→カラムの対応
1. @TableField(主キーの場合は @TableId)が設定されている場合
SQL文を生成する際、カラム名は @TableField(または @TableId)のvalue属性の値となります。フィールド名がカラム名をキャメルケースに変換した値と一致しない場合は、エイリアスが指定されます。
1 2 3 4 5 6 |
@TableField("bookName") private String bookName; // TableFieldInfo.column: bookName // TableFieldInfo.property: bookName // SQL: SELECT bookName … |
1 2 3 4 5 6 |
@TableField("bookName") private String bookTitle; // TableFieldInfo.column: bookName // TableFieldInfo.property: bookTitle // SQL: SELECT bookName AS bookTitle … |
1 2 3 4 5 6 |
@TableField("BOOK_NAME") private String bookName; // TableFieldInfo.column: BOOK_NAME // TableFieldInfo.property: bookName // SQL: SELECT BOOK_NAME … |
2. @TableField(主キーの場合は @TableId)が設定されていない場合
@TableField(または @TableId)が設定されていない場合は、カラム名はフィールド名をスネークケースに変換した値となります。
1 2 3 4 5 |
private String bookName; // TableFieldInfo.column: book_name // TableFieldInfo.property: bookName // SQL: SELECT book_name … |
カラム→フィールドの対応
DBから取得した値をエンティティのフィールドへセットする際、テーブルのカラム名またはエイリアスをキャメルケースに変換した値でフィールド名を探します。
3つ目の例では、カラム名 book_name をキャメルケースに変換すると bookName となるため、エンティティフィールドの book_name は null となります。
1 2 3 4 5 6 |
private String bookName; // TableFieldInfo.column: book_name // TableFieldInfo.property: bookName // SQL: SELECT book_name … // → bookName: "壁" |
1 2 3 4 5 6 7 |
@TableField("book_name") private String bookTitle; // TableFieldInfo.column: book_name // TableFieldInfo.property: bookTitle // SQL: SELECT book_name AS bookTitle … // → bookTitle: "壁" |
1 2 3 4 5 6 7 |
@TableField("book_name") private String book_name; // TableFieldInfo.column: book_name // TableFieldInfo.property: book_name // SQL: SELECT book_name … // → book_name: null |
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>