在Mapper中如何传递多个参数(三种方式)

在Mapper中如何传递多个参数(三种方式)

xml中#{0},#{1}方式

若Mapper层函数有多个参数,那么其对应的xml中,#{0}代表接收的是Mapper层中的第一个参数,#{1}代表Mapper中的第二个参数

xml中参数和Mapper方法中参数顺序一致。

  1. 定义Mapper接口:
// UserMapper.java
public interface UserMapper {
    List<User> getUsersByNameAndEmail(String name, String email);
}
  1. XML映射文件:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="getUsersByNameAndEmail" resultType="com.example.User">
    SELECT * FROM users
    WHERE username = #{0} AND email = #{1}
  </select>
</mapper>

UserMapper接口的getUsersByNameAndEmail方法有两个参数,分别是name和email。

在XML映射文件中,我们使用#{0}和#{1}分别表示这两个参数的位置,这样在执行SQL查询时,MyBatis会自动将对应位置的参数值填充到SQL语句中,完成查询操作。

@Param方式

在MyBatis中,使用**@Param注解可以在Mapper接口方法的参数前加上注解,并指定注解内的参数名,这样在Mapper XML文件中可以直接引用这些参数名,而不再使用#{0}#{1}**等占位符。这使得代码更加直观和易于维护。

以下是使用**@Param**注解的示例代码:

  1. 定义Mapper接口:
// UserMapper.java
public interface UserMapper {
    List<User> getUsersByNameAndEmail(@Param("name") String name, @Param("email") String email);
}
  1. XML映射文件:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="getUsersByNameAndEmail" resultType="com.example.User">
    SELECT * FROM users
    WHERE username = #{name} AND email = #{email}
  </select>
</mapper>

在上述示例中,UserMapper接口的getUsersByNameAndEmail方法有两个参数,分别是name和email,在方法的参数前使用了@Param注解,并指定了注解内的参数名。在XML映射文件中,我们可以直接引用@Param注解内指定的参数名(即name和email),而不再使用占位符,使得SQL语句更加清晰和易读。

对于没有使用**@Param**注解的情况,MyBatis会根据参数在方法参数列表中的位置顺序来绑定参数值。

如果使用了**@Param**注解为参数指定了名称,MyBatis会根据注解的名称来绑定参数值,而不再依赖参数的位置顺序。

Map方法

在MyBatis中,您可以将多个参数封装成一个Map,以HashMap的形式传递到Mapper中。

这样可以在Mapper接口方法中只接收一个Map参数

然后在Mapper XML文件中使用#{key}来引用Map中的键值对作为SQL参数。

  1. 定义Mapper接口:
// UserMapper.java
public interface UserMapper {
    List<User> getUsersByMap(Map<String, Object> params);
}
  1. XML映射文件:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="getUsersByMap" resultType="com.example.User">
    SELECT * FROM users
    WHERE username = #{name} AND email = #{email}
  </select>
</mapper>
public List<User> getUsersByMap(String name, Integer age) {
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("name", name);
    paramMap.put("age", age);
    return userMapper.getUsersByMap(paramMap);
}

确保Map中的键名和Mapper XML文件中的参数名一致

特别是当参数的数量不固定或者不是常用的业务实体时,这种方式可以简化参数传递

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值