@Param注解


本篇博客,引用了大佬的文章,防止将来丢失该文章。如有侵权,请通知下,马上删除。 3q
本篇博客引用大佬文章链接地址为: http://www.mybatis.cn/archives/920.html

@Param注解的作用

是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。

@Param注解的用法

1、MyBatis的参数映射配置

MyBatis的参数映射利用的属性是:parameterType。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数。

2、简单类型,不需要设置 parameterType

对于大多数简单的使用场景,你都不需要使用复杂的参数,比如:

<select id="selectUsers" resultType="User">
  select id, username, password
  from users
  where id = #{id}
</select>

上面的这个示例说明了一个非常简单的命名参数映射。鉴于参数类型(parameterType)会被自动设置为 int,这个参数可以随意命名。

3、复杂类型,需要设置 parameterType

原始类型或简单数据类型(比如 Integer 和 String)因为没有其它属性,会用它们的值来作为参数,不需要设置 parameterType。 然而,如果传入一个复杂的对象,行为就会有点不一样了。比如:

<insert id="insertUser" parameterType="User">
  insert into users (id, username, password)
  values (#{id}, #{username}, #{password})
</insert>

此时需要 User 类型的参数对象传递到了语句中,会查找 id、username 和 password 属性,然后将它们的值传入预处理语句的参数中。

另外,还可以使用 map 传递,这是最原始的用法。定义接口使用map传递多个参数进行查询,如下所示:

public List<Product> getByMap(Map<String, Object> paramMap);

<!--通过map传递参数 -->
<select id="selectUsers" resultType="User" parameterType="map">
  select id, username, password
  from users
  where id = #{id} and age = #{age}
</select>

需要注意的有:
1、parameterType参数类型为map(此处使用别名)java.util.Map
2、参数名称是map中的key

4、复杂类型,使用注解传递参数,不需要设置 parameterType

创建接口,使用注解传递多个参数进行查询

public List<Users> getUsers(@Param("name") String name, @Param("age") int age);

<select id="selectUsers" resultType="User">
  select id, username, password
  from users
  where id = #{id} and age = #{age}
</select>

这种方式不需要设置参数类型 ,参数名称为注解定义的名称。这种方式能够大大提高可读性,但是只适合参数较少的情况,一般是少于5个用此方法

总结

在不使用@Param注解的时候,函数的参数只能为一个,并且在查询语句取值时只能用#{}。如果想传递多个参数,parameterType参数类型为map(此处为别名)或者为JavaBean。

而使用@Param注解则可以使用多个参数,无需再设置parameterType,并且在查询语句中使用时可以使用#{}或者${}

另外附加官方文档截图:
在这里插入图片描述

本篇博客引用大佬文章链接地址为: http://www.mybatis.cn/archives/920.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值