mybatis mapper.xml --注释 带参数的坑

最近做一个很简单的统计项目,统计的逻辑产品一直改版,为了便于之后产品返回的时候快速的切换回老版本的逻辑,就给之前的sql注释了直接在下面写了新的sql,注释的时候一般我都习惯性的选中之后Ctrl+/利用编辑器自带的自动注释功能,这个时候编辑器是分两种情况的:情况一是你之前老的sql没有类似<where>这样带特殊尖括号的语句,这个时候如果用Ctrl+/的话编辑器会用'--'也就是sql语句的注释去注释你之前的老sql,注释完之后编辑器并不会报错如果比较幸运你之前的语句里没有参数的话执行也是没有问题的,但是,注意这个但是,如果你之前的sql语句带#{xxxx}或者${xxx}这样的参数,形如下面这样:

-- #{month,jdbcType=VARCHAR}

那么恭喜你,这个时候执行的话就会报很诡异的异常,类似于下面这样:

org.springframework.dao.TransientDataAccessResourceException: 
### Error querying database.  Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

这个时候你可能会和我一样丈二和尚摸不着头脑,特别是如果之前么有遇见过这个问题的话,很有可能会在这里搞很久;情况二是你的老sql有<where>这样的带尖括号的语句,这个时候你用Ctrl+/的话,会自动是<!-- xxx-->也就是标准的xml注释,这个时候即使你注释的xxx包括外部参数占位,执行的时候也不会报错,形如下面这样也不会有问题:

<!--  #{month,jdbcType=VARCHAR}-->
这个问题由于之前自己没有遇见过所以这次在这里卡了挺久才试出问题原因,至于两种方式为何会有所区别回头还得好好看看mybatis的源码,之后再补充到这篇文章里,占用上班时间做个记录,希望老大没看见,哈哈

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值