@Param注解的作用

@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<User> findUsers(@Param("name") String name, @Param("age") int age);

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


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

less 复制代码
java
深色版本
@Update({
  "<script>",
  "UPDATE orders SET status = #{status}",
  "<where>",
  "id IN",
  "<foreach item='id' collection='ids' open='(' separator=',' close=')'>#{id}</foreach>",
  "</where>",
  "</script>"
})
int updateOrderStatus(@Param("ids") List<Integer> 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 的关键一步!

相关推荐
YuTaoShao1 小时前
【LeetCode 热题 100】139. 单词拆分——(解法一)记忆化搜索
java·算法·leetcode·职场和发展
Best_Liu~2 小时前
策略模式 vs 适配器模式
java·spring boot·适配器模式·策略模式
你的人类朋友2 小时前
【Node&Vue】什么是ECMAScript?
前端·javascript·后端
direction__2 小时前
Java Main无法初始化主类的原因与解决方法(VsCode工具)
java·vscode
帧栈2 小时前
开发避坑指南(29):微信昵称特殊字符存储异常修复方案
java·mysql
每天的每一天2 小时前
面试可能问到的问题思考-Redis
java
青云交3 小时前
Java 大视界 -- Java 大数据在智能安防人脸识别系统中的活体检测与防伪技术应用
java·大数据·生成对抗网络·人脸识别·智能安防·防伪技术·活体测试
你的人类朋友3 小时前
说说你对go的认识
后端·云原生·go
学习至死qaq3 小时前
信创产品TongLinkQ安装及springboot2整合使用
java·东方通·tonglinkq
我崽不熬夜3 小时前
Java中基本的输入输出(I/O)操作:你知道如何处理文件吗?
java·后端·java ee