在Mapper中如何传递多个参数

95 阅读1分钟

一、Mapper 中传递多个参数的方式

在 Mapper 接口方法中传递多个参数时,MyBatis 需要明确参数的映射关系,常用方式有以下几种:

  1. 使用@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>
  1. 使用 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>
    
  2. 使用 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>
    
  3. 按参数顺序传递(不推荐)
    不指定参数名时,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>