複数のパラメータを使用してマッパーを作成する方法
Mapperで複数引数を渡すには、次の2つの方法があります。
- Map 型を使用パラメータとして使用
MapperインターフェースメソッドでMap型をパラメータとして使い、必要な複数のパラメータをキーバリュー形式でMapに詰め込み、SQL文内では#{key}の形でパラメータを参照する。
その話は本当だったのか確かめたい。
// Mapper接口
public interface UserMapper {
List<User> getUserList(Map<String, Object> params);
}
// Mapper XML文件
<select id="getUserList" parameterType="java.util.Map" resultType="User">
SELECT * FROM user WHERE age = #{age} AND gender = #{gender}
</select>
// 调用Mapper方法
Map<String, Object> params = new HashMap<>();
params.put("age", 20);
params.put("gender", "男");
List<User> userList = userMapper.getUserList(params);
- パラメータを複数使用して
Mapperインターフェースメソッドに@Paramアノテーションを使用し、各パラメータに名前を付け、SQLステートメント内で#{名前}を使用してパラメータを参照します。
例えば:
// Mapper接口
public interface UserMapper {
List<User> getUserList(@Param("age") int age, @Param("gender") String gender);
}
// Mapper XML文件
<select id="getUserList" resultType="User">
SELECT * FROM user WHERE age = #{age} AND gender = #{gender}
</select>
// 调用Mapper方法
List<User> userList = userMapper.getUserList(20, "男");
ご注意ください。複数パラメータを使用する場合、パラメータと@Paramアノテーションに設定する名称の順序が一致していることをご確認ください。そうでない場合、パラメータの渡しが間違っている可能性があります。Map型をパラメータとして使用する場合、この問題は発生しませんが、その場合はMapでパラメータ名を明確に指定する必要があります。