MyBatisはどのようにmapパラメータを受け取るのか?
MyBatisでは、@Paramアノテーションと#{ }プレースホルダーを使用して、Map型のパラメータを取得することができます。
最初、SQL文の中でMapの値を参照するために#{key}プレースホルダーを使用します。例:
<select id="selectUser" resultType="User">
SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>
その後、メソッドのパラメーターで@Paramアノテーションを使用してMapタイプのパラメーターを識別し、#{}プレースホルダーでマップのキーを使用します。例:
@Select("SELECT * FROM user WHERE id = #{id} AND name = #{name}")
User selectUser(@Param("id") int id, @Param("name") String name);
パラメータが複雑なMapオブジェクトの場合は、@Paramアノテーションを使用してパラメータ名を指定し、SQLステートメントで#{paramName.key}を使用してMap内の値を参照することができます。例えば:
@Select("SELECT * FROM user WHERE id = #{param.mapKey} AND name = #{param.mapValue}")
User selectUser(@Param("param") Map<String, Object> paramMap);
メソッドを呼び出す際に、キーと値のペアを含むMapパラメーターを渡すことができます。例えば、
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("id", 1);
paramMap.put("name", "Alice");
User user = userDao.selectUser(paramMap);
XML設定ファイルで@Paramアノテーションを使用する際には、useActualParamNameをtrueに設定する必要があります。これにより、MyBatisがパラメータ名を正しく解析できるようになります。例えば、
<settings>
<setting name="useActualParamName" value="true" />
</settings>