MyBatisでプロパティ名とカラム名が一致しない場合の解決策
MyBatisでは、ResultMapとResultTypeを使うことで、プロパティ名とカラム名が異なる問題に対応できます。
- ネイティブな日本語で言い換えると、
<resultMap id="userResultMap" type="User">
<result property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
ResultMap をクエリステートメントで使用します。
<select id="getUser" resultMap="userResultMap">
SELECT user_id, user_name, user_email
FROM users
WHERE user_id = #{id}
</select>
- ResultTypeを使う:例えば、少数のプロパティ名だけがフィールド名と一致していないのであれば、クエリー文内で別名を使っても対処できます。
<select id="getUser" resultType="User">
SELECT user_id as id, user_name as name, user_email as email
FROM users
WHERE user_id = #{id}
</select>
注意すべき点は、ResultMap を使用すればより複雑なマッピングが実現できるのに対し、ResultType は単純にクエリ結果を該当するプロパティに直接マッピングするだけです。従って、複雑なマッピング関係がある場合は、ResultMap の使用を推奨し、プロパティ名とフィールド名が一致しない問題の解決に当てます。