@Param注解的使用,加与不加

本文深入探讨MyBatis在不同场景下如何处理接口参数,特别是在使用if判断时的参数绑定问题,解析为何需要使用@Param注解及如何正确配置避免常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用mybatis时经常碰到这些错误:

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'code' in 'class java.lang.String'; (应该是多个参数的情况下会出现)
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'code' not found. Available parameters are [0, 1, param1, param2];

其实都是接口的参数命名导致mybatis参数绑定出错引起的。默认情况下mybatis把参数按顺序转化为[0, 1, param1, param2],也就是说#{0} 和 #{param1} 是一样的,都是取第一个参数,以此类推。
下面经过实验验证,首先分两种情况:

  1. 使用if判断
    如果使用了< if test="codee != null and codee !=''"> if判断,那么接口参数就需要加@Param注解。使用了if判断,mybatis取值的时候参数就成了[param1, codee],所以你不得不加注解@Param("codee"),这个时候不再有0或1了(Available parameters are [param1, codee]),或者param1… 也可用,比如:

    < if test="param1 != null and param1 !=''">
    and FAULTPOSITION_CODE like CONCAT('%',CONCAT(#{param1,jdbcType=VARCHAR},'%')) ESCAPE '*'
     < /if>
    
  2. 没有使用if判断
    这个时候也分两种情况:
    (1)接口参数只有一个,不管接口参数名是什么,这个时候#{xxx}没有限制,可以是0,param1,也可以是aaa,bbb。可以不加注解。
    (2)当接口参数大于一个的时候,mybatis的参数集就是上边说的默认值[0, 1, param1, param2],如果你不用默认值,就需要加上@Param注解起别名。一旦加了注解,mybatis的参数集就和第一种情况一样了,这个时候也就不再区分是否使用if判断。

mybatis的详细参数转化可以看这个文章:https://my.oschina.net/flags/blog/381199

@Param注解的作用是给参数命名,可以在mapper中使用这个命名来引用参数的值。当使用@Param注解声明参数时,可以使用#{}或${}的方式来引用参数的值。如果没有使用@Param注解声明参数,则必须使用#{}的方式来引用参数的值。使用\({}的方式会导致错误。在mybatis的mapper文件中,可以使用\){_parameter}来引用参数的值,这样可以在动态配置中使用参数。当只有一个参数时,可以使用_parameter来表示这个参数,如果使用@Param注解,则会使用指定的参数值代替。通过在注解中指定参数名,可以在外部取出传入的参数值。在SQL语句中,可以使用#{参数名}来引用参数的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [@Param注解的用法解析](https://blog.youkuaiyun.com/weixin_34306593/article/details/94760591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【详解】@Param注解的用法](https://blog.youkuaiyun.com/m0_67402235/article/details/126045190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值