MyBatis 中的@Param注解最佳实践

 更新时间:2025年11月25日 17:07:55   作者: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") 是更安全的做法,原因如下:

  1. 编译兼容性:确保即使 Java 编译时未保留参数名(默认情况),也能正常工作
  2. 代码清晰:明确指定 SQL 中使用的参数名
  3. 避免升级风险:项目升级 MyBatis 或修改编译配置时不会出错
  4. 团队协作规范:统一风格,便于维护

所以虽然单个参数时可以省略,但推荐始终加上 @Param这是一种防御性编程的好习惯。

结论:在你的代码中,不写通常也能运行(MyBatis 3.4.1+),但写上更好。

到此这篇关于MyBatis 中的@Param注解的文章就介绍到这了,更多相关MyBatis @Param注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java数组、泛型、集合在多态中的使用及对比

    java数组、泛型、集合在多态中的使用及对比

    本文主要介绍了java数组、泛型、集合在多态中的使用及对比。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • java IO 字节流详解及实例代码

    java IO 字节流详解及实例代码

    这篇文章主要介绍了java IO 字节流详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • 轻松掌握Java注解,让编程更智能、更优雅

    轻松掌握Java注解,让编程更智能、更优雅

    轻松掌握Java注解?没问题!想要让你的Java代码更具可读性、维护性,同时提升开发效率?本指南将带你快速入门Java注解的世界,只需短短几分钟,你就能揭秘这个强大的编程工具,让编写有声明性逻辑的代码变得轻而易举,赶快一起来探索吧!
    2024-01-01
  • Nacos服务多级存储模型使用及说明

    Nacos服务多级存储模型使用及说明

    文章介绍了服务分级存储模型,通过Nacos将同一机房内的实例划分为一个集群,微服务互相访问时应优先访问同集群实例,以提高访问速度,通过配置application.yml文件,可以实现集群的创建和管理
    2026-02-02
  • Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    这篇文章主要介绍了Spring Security实现基于RBAC的权限表达式动态访问控制,资源权限表达式动态权限控制在Spring Security也是可以实现的,首先开启方法级别的注解安全控制,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • JMeter导入自定义的Jar包的详解教程

    JMeter导入自定义的Jar包的详解教程

    这篇文章主要介绍了JMeter导入自定义的Jar包的详解教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java this super代码实例及使用方法总结

    Java this super代码实例及使用方法总结

    这篇文章主要介绍了Java this super代码实例及使用方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Integer IntegerCache源码阅读

    Integer IntegerCache源码阅读

    这篇文章主要介绍了Integer IntegerCache源码阅读,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 详细解读JAVA多线程实现的三种方式

    详细解读JAVA多线程实现的三种方式

    本篇文章主要介绍了详细解读JAVA多线程实现的三种方式,主要包括继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。有需要的可以了解一下。
    2016-11-11
  • Java中List.contains(Object object)方法使用

    Java中List.contains(Object object)方法使用

    本文主要介绍了Java中List.contains(Object object)方法,使用List.contains(Object object)方法判断ArrayList是否包含一个元素对象,感兴趣的可以了解一下
    2022-04-04

最新评论