一、多参数处理方式
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") In

本文探讨了MyBatis处理多参数的几种方式,包括注解、封装参数和使用占位符,并提供了相应的mapper接口和SQL映射文件示例。同时,通过调试分析了MyBatis如何在底层将多参数封装成Map,详细解析了参数处理的过程,旨在帮助读者深入理解MyBatis的工作机制。
最低0.47元/天 解锁文章
2488





