对于MyBatis,我们可以通过Mapper接口的方法的入参类型来传递参数。如果我们需要传递List或者Map类型的参数,该如何处理呢?下面我们来一一讲解。
传递List类型的参数
当我们需要将一个List类型的参数传递给Mapper接口的方法时,我们可以采用@Param注解的方式将参数进行命名,如下所示:
public interface UserMapper {
List<User> selectUsers(@Param("ids") List<Integer> ids);
}
在Mapper接口的方法中,我们通过@Param注解给List类型的参数命名为“ids”。在SQL语句中,我们通过#符号加上参数名来引用当前List类型的参数,如下所示:
<select id="selectUsers" resultMap="userResultMap">
SELECT id, name, age
FROM user
WHERE id IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
在上面的SQL语句中,我们使用了foreach标签来遍历List类型的参数,将其中的每个元素都按照一定的规则转换成SQL语句的一部分。
传递Map类型的参数
如果我们需要将一个Map类型的参数传递给Mapper接口的方法时,可以在SQL语句中使用${}来引用Map中对应的值。如下所示:
public interface UserMapper {
List<User> selectUsers(Map<String, Object> params);
}
在Mapper接口的方法中,我们直接将参数类型定义为Map
<select id="selectUsers" resultMap="userResultMap">
SELECT *
FROM user
WHERE 1 = 1
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
在上面的SQL语句中,我们使用了if标签来根据Map中传递的参数值动态生成SQL语句。其中,通过#{name}和#{age}来引用Map中对应的参数值。
示例代码
这里提供两个例子供参考:
示例一:根据多个id查询用户信息
Mapper接口如下:
public interface UserMapper {
List<User> selectUsers(@Param("ids") List<Integer> ids);
}
SQL语句如下:
<select id="selectUsers" resultMap="userResultMap">
SELECT *
FROM user
WHERE id IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
调用方法如下:
List<User> users = userMapper.selectUsers(Arrays.asList(1, 2, 3));
示例二:根据用户名和年龄查询用户信息
Mapper接口如下:
public interface UserMapper {
List<User> selectUsers(Map<String, Object> params);
}
SQL语句如下:
<select id="selectUsers" resultMap="userResultMap">
SELECT *
FROM user
WHERE 1 = 1
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
调用方法如下:
Map<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("age", 18);
List<User> users = userMapper.selectUsers(params);
以上就是MyBatis实现获取入参是List和Map的取值的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis实现获取入参是List和Map的取值 - Python技术站