MyBatis 中的@Param注解最佳实践
作者:tuokuac
在 MyBatis 中,@Param 注解的作用是为方法参数指定一个在 XML 映射文件或注解 SQL 中引用的名称,对于你的问题,是否可以不写,取决于MyBatis的版本和参数类型,这篇文章给大家介绍MyBatis中的@Param注解,感兴趣的朋友跟随小编一起看看吧
在 MyBatis 中,@Param 注解的作用是为方法参数指定一个在 XML 映射文件或注解 SQL 中引用的名称。对于你的问题,是否可以不写,取决于 MyBatis 的版本和参数类型。
情况分析
1. 可以省略的情况(单个基本类型参数)
如果你的 MyBatis 版本是 3.4.1+,且方法只有一个基本类型或简单对象参数(如 Long, String, 自定义对象等),可以省略 @Param。
此时 MyBatis 会自动使用参数的实际变量名(regionId)作为引用名。
// MyBatis 3.4.1+ 可以省略 List<ServeResDTO> queryServeListByRegionId(Long regionId);
在 XML 中这样引用:
<select id="queryServeListByRegionId" resultType="com.xxx.ServeResDTO">
SELECT * FROM serve WHERE region_id = #{regionId}
</select>2. 必须添加的情况
- 多参数方法:当有多个参数时,必须使用
@Param区分
List<Serve> query(@Param("name") String name, @Param("status") Integer status);- 集合类型参数:如
@Param("list") List<Long> ids - 动态 SQL:在
<if>、<foreach>等标签中引用参数 - 代码可读性:显式声明参数名更清晰,避免编译后参数名丢失的问题(Java 8+ 需加上
-parameters编译参数才能保留参数名)
建议的最佳实践
写上 @Param("regionId") 是更安全的做法,原因如下:
- 编译兼容性:确保即使 Java 编译时未保留参数名(默认情况),也能正常工作
- 代码清晰:明确指定 SQL 中使用的参数名
- 避免升级风险:项目升级 MyBatis 或修改编译配置时不会出错
- 团队协作规范:统一风格,便于维护
所以虽然单个参数时可以省略,但推荐始终加上 @Param,这是一种防御性编程的好习惯。
结论:在你的代码中,不写通常也能运行(MyBatis 3.4.1+),但写上更好。
到此这篇关于MyBatis 中的@Param注解的文章就介绍到这了,更多相关MyBatis @Param注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
