Mybatis不使用@Param注解BindingException

今天遇到一个关于mybatis的一个问题,本地项目启动后调用其他项目的controller方法后(不建议直接调controller方法),控制台打印错误信息org.apache.ibatis.binding.BindingException

原因是Mapper执行方法的时候xml里不识别传入的方法,因为mapper的方法是query(arg0,arg1),当你传入参数param1的时候,它不识别,一般此时要加Param注解,query(@Param("param1") arg0)

其实是maven-plugin的问题,有一个参数-parameters默认是不开启的,开启后重新编译即可不加Param注解。

===============================================================

另外,如果传参类型为对象时,开启-parameters参数后不用加@Param注解,如果加了注解,只会将对象编译为指定参数名,需要在Mapper用参时指定对象,不加@Param注解则不需要指定。

例:

-parameters参数已开启,不加@Param注解

mapper.java

int insert(Engage engage);

mapper.xml


<insert id="insert">
        insert into engage (id, engage_no, engage_name, engage_desc,
        labor_way, cost_dept_one_id, create_channel_id, create_user)
        VALUES (#{id}, #{engageNo}, #{engageName}, #{engageDesc},
        #{laborWay}, #{costDeptOneId}, #{createChannelId}, #{createUser})
</insert>

-parameters参数已开启,加@Param注解

mapper.java

int insert(@Param("engage")Engage engage);

mapper.xml需要指定

<insert id="insert">
        insert into engage (id, engage_no, engage_name, engage_desc,
        labor_way, cost_dept_one_id, create_channel_id, create_user)
        VALUES (#{engage.id}, #{engage.engageNo}, #{engage.engageName}, #{engage.engageDesc},
        #{engage.laborWay}, #{engage.costDeptOneId}, #{engage.createChannelId}, #{engage.createUser})
    </insert>

===============================================================

参考:https://blog.51cto.com/u_12393361/5021343解决mybatis不加@Param报错 org.apache.ibatis.binding.BindingException,在使用mybatis开发时,如果Dao层方法有多个参数,但参数没加@Param注解时,可能会到一下错误:org.apache.ibatis.binding.BindingException:Parameter‘no’notfound.Availableparametersare[arg1,arg0,param1,https://blog.51cto.com/u_12393361/5021343mybatis省略@Param注解操作_java_脚本之家这篇文章主要介绍了mybatis省略@Param注解操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧https://www.jb51.net/article/200763.htm?tdsourcetag=s_pcqq_aiomsg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mybatis中的BindingException异常是由于参数绑定失败导致的。在你提供的引用中,错误信息显示参数'id'未找到,可用参数为'collection'和'list'。 一种可能的原因是在动态拼装SQL语句时,没有正确指定参数名称。在这种情况下,你可以使用@Param注解来指定参数名称。例如,在使用foreach语句进行参数拼装时,你可以给参数添加@Param("ids")注解来指定参数名称。 还有一种情况是在使用动态拼装的SQL时,即使方法只有一个参数,也需要使用@Param注解来指定参数名称。这是因为动态SQL可能会导致参数映射失败。 另外,如果你使用的是Java 8及以上版本,并且在mybatis的settings中配置了useActualParamName属性,并且在编译时添加了-parameters参数,那么在多参数的情况下,就不需要使用@Param注解来指定参数名称。这样可以避免手动指定参数名称的繁琐。 综上所述,当出现BindingException异常时,你可以通过使用@Param注解来指定参数名称,或者根据情况进行相应的配置来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mybatis Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available param...](https://blog.csdn.net/weixin_42191498/article/details/129153633)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [org.mybatis.spring.MyBatisSystemException/org.apache.ibatis.binding.BindingException](https://blog.csdn.net/weixin_51091560/article/details/126471542)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值