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>
bannerAds