@Param 注解在 Java 中(尤其是 MyBatis 框架中)非常常见,它的主要作用是:

🧠 作用:为 MyBatis 映射器接口方法的参数命名,以便在 SQL 中引用

✅ 举个例子你就明白了:

less

复制代码

java

深色版本

@Select("SELECT * FROM users WHERE id = #{id}")

User selectById(@Param("id") Integer id);

在这个例子中:

@Param("id") 表示给传入的参数起一个名字叫 "id"。

在 SQL 语句中就可以用 #{id} 来引用这个参数。

📌 为什么需要 @Param?

情况一:只有一个参数时(可以省略)

python

复制代码

java

深色版本

@Select("SELECT * FROM users WHERE id = #{id}")

User selectById(Integer id);

✅ 这种情况可以不加 @Param,MyBatis 默认会把参数名识别为 id 或 _parameter。

情况二:有多个参数时(必须使用 @Param)

less

复制代码

java

深色版本

@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")

List findUsers(@Param("name") String name, @Param("age") int age);

❌ 如果你不加 @Param,MyBatis 就不知道哪个参数对应 name,哪个对应 age,就会报错!

情况三:传入多个对象或 Map

less

复制代码

java

深色版本

@Update({

""

})

int updateOrderStatus(@Param("ids") List ids, @Param("status") String status);

在这种复杂场景下,@Param 可以让你清晰地指定每个参数的名称和用途。

🧩 总结一下:什么时候该用 @Param?

参数数量

是否建议使用 @Param

原因

1个基本类型/简单对象

❌ 可选

可以不用,但加上更明确

多个参数

✅ 必须用

否则无法区分参数

多个集合/List/Map

✅ 推荐用

避免歧义,便于 SQL 引用

📚 衍生知识:SQL 中还可以怎么写?

sql

复制代码

sql

深色版本

WHERE name = #{name} AND age = #{age}

WHERE name = #{arg0} AND age = #{arg1} -- 不推荐,依赖顺序,可读性差

WHERE name = ${name} -- 不安全,慎用(容易被注入)

如果你是在使用 Spring Boot + MyBatis 开发项目,正确使用 @Param 是写出清晰、安全 SQL 的关键一步!