一、Mapper 中传递多个参数的方式
在 Mapper 接口方法中传递多个参数时,MyBatis 需要明确参数的映射关系,常用方式有以下几种:
- 使用
@Param注解(推荐)
在方法参数前添加@Param注解指定参数名,XML 或注解 SQL 中直接通过该名称引用。 java
// Mapper接口
User selectUser(@Param("id") Integer id, @Param("name") String name);
// XML映射
<select id="selectUser" resultType="User">
SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>
-
使用 Map 集合
将多个参数封装到Map中,XML 中通过 Map 的 key 引用参数。
示例:java
// Mapper接口 User selectUser(Map<String, Object> params); // 调用时 Map<String, Object> params = new HashMap<>(); params.put("id", 1); params.put("name", "张三"); userMapper.selectUser(params); // XML映射 <select id="selectUser" resultType="User"> SELECT * FROM user WHERE id = #{id} AND name = #{name} </select> -
使用 JavaBean(实体类)
将多个参数封装到自定义实体类中,方法参数为该实体类,XML 中通过实体类的属性名引用。
示例:java
// 实体类 public class UserQuery { private Integer id; private String name; // getter/setter } // Mapper接口 User selectUser(UserQuery query); // XML映射 <select id="selectUser" resultType="User"> SELECT * FROM user WHERE id = #{id} AND name = #{name} </select> -
按参数顺序传递(不推荐)
不指定参数名时,MyBatis 会按参数顺序自动分配arg0、arg1...或param1、param2...作为参数名,可读性差,易出错。
示例:java
// Mapper接口 User selectUser(Integer id, String name); // XML映射(使用param1、param2) <select id="selectUser" resultType="User"> SELECT * FROM user WHERE id = #{param1} AND name = #{param2} </select>