一、多参数处理方式
1.1使用@Param
注解
MyBatis 允许在mapper 接口中使用@Param
注解来处理多个参数。
mapper 接口:
/** @Param 注解中的值可以是任意的 */
Employee getEmpByIdAndUsername(@Param("id") Integer id, @Param("username") String username);
SQL 映射文件:
<!-- 这里#{} 中的id 与username,对应上面@Param 注解中的值 -->
<select id="getEmpByIdAndUsername" resultType="employee">
select * from t_employee where id = #{id} and username = #{username}
</select>
1.2使用Map
封装多个参数
MyBatis 允许使用Map
来封装需要在SQL 中传入的参数。
mapper 接口:
Employee getEmpByMap(Map<String, Object> map);
SQL 映射文件:
<!-- #{} 中的值要与在map 中定义的key 一致 -->
<select id="getEmpByMap" resultType="employee">
select * from t_employee where id = #{id} and username = #{username}
</select>
测试代码,使用Map
封装传递的参数:
// 用来封装在SQL 语句中需要传递的参数
Map<String, Object> map = new HashMap<>();
map.put("id", 1);
map.put("username", "张三");
Employee employee = employeeMapper.getEmpByMap(map);
1.3使用#{param1 ... n}
参数
如果我们既不用@Param
也不使用map
,那么可以在编写SQL 语句的时候,使用#{param1 ... n}
来代表需要传递的参数。
mapper 接口:
Employee getEmpByIdAndGender(Integer id, String username);
SQL 映射文件:
<!-- 通过使用#{param1 ... n}的方式来传递参数 -->
<select id="getEmpByIdAndGender" resultType="employee">
select * from t_employee where id = #{param1} and gender = #{param2}
</select>
1.4发散思维
比如遇到下面的几种情况时,我们要能够随机应变:
/** 第一个参数加@Param 注解,后面一个参数不加 */
Employee getEmpByIdAndEmail(@Param("id") Int