はじめに
Spring-Boot でのMyBatisのMapper.xmlでタグの設定などで
「これ忘れそうだな」と思ったので自分用の備忘録として残します。
もし意見や誤った箇所などありましたらコメントください。
mapperタグ
このタグでどのファイルをこのxmlと紐付けるかのクラスパスを設定する。
<mapper namespace="com.example.repository.UserMapper">
上記の場合だと
・repozitoryまでがパッケージ。
・UserMapperはインターフェイス名。
・紐付くファイルはインターフェイスでなければいけない。
・mapperタグはもちろん締めタグが必要。
・このタグの中でクエリを記述していく
Mapper.xmlの基本
前提条件として
クエリのSELECTやINSERTなどのステートメントはタグとして記述する。
例えば
<SELECT id="findAll" resultType="User">
select
*
from
user
</SELECT>
こんな感じ。
ステートメントタグが無いとO/Rマッパーとして機能しない。
ステートメントタグのid
・この部分でMapper.javaで作成したメソッドと紐付ける。
・例えば上述したSELECT文だとUserMapperのfindAllというメソッドに紐付いている。
resultType
・このクエリの戻り値を表す。
・上述したクエリだとUserというクラスが戻り値になる=戻り値はクラスである
resultMapタグ
・戻り値を一元管理できるタグ。
・resultTypeで定義する必要がない。
・戻り値が必要なのはselect文のみ。
・resultMapはxmlのクエリの記述より上に記述した方が分かりやすい
例
<resultMap type="com.example.domain.model.User" id="user">
<id column="user_id" property="userId" />
<result column="password" property="password" />
<result column="user_name" property="userName" />
<result column="age" property="age" />
</resultMap>
resultMapタグのtype要素
・ここでどのクラスと紐付けるのかクラスパスを設定する。
・上述した場合だとmodelまでがパッケージ
・Userがクラス名
・type=エンティティクラス
・戻り値もこのクラスになる
resultMapタグのid
・この要素でクエリで使うときの名前を決める
・任意の名前で良い
・可読性のため分かりやすい名前を付ける(当たり前)
・要はこのresultMapくんの名前
resultMapでのセッティング
・id column=テーブルの主キーとなるカラム
・result column=このテーブルのその他のカラム
・property=エンティティのfieldとカラム名を紐付ける
<id column="user_id" property="userId" />
この場合
・user_idというカラムにuserIdというフィールドを紐付けている。
・user_idは主キーである
ステートメントタグのresultMap
・この要素でresultMapタグで名付けたidと紐付ける
例
<SELECT id="findAll" resultMap="user">
select
*
from
user
</SELECT>
・上記の場合、上述したresultMapのid="user"と紐付いている。
・他のselect文でも使用できる。
・resultTypeで記述しなくても一元管理できるので可読性が上がる。
・単純に予後が非常に楽
今日は遅いのでまた明日。
SELECT文以外のタグ、associationタグ、collectionタグ
columnPrefix要素について触れていく。