mybatis mapper.xml注释带参数的坑怎么解决(mapper,mybatis,xml,开发技术)

时间:2024-05-07 12:04:32 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

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的源码,之后再补充到这篇文章里,占用上班时间做个记录

mybatis的xml中注释需谨慎

报错内容

java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2)

调试半天,网上查了半天都是# 、$ 用法出错,一次次的对比,一个个字找,发现,用法根本没问题,突然。。。看到了注释中的

#{executorId},想想,也许是这个的原因呢?然后就给注释删了,结果发现就是注释的锅:

这样,mybatis仍旧会把#{}算成一个带注入的参数,二SQL认出了这个-- 的注释

--AND(dept.id=#{executorId}ORdept.parentId=#{executorId}ORparentIdin(SELECTidfromuser_department--WHEREuser_department.id=#{executorId}ORuser_department.parentId=#{executorId}))

mybatis mapper.xml注释带参数的坑怎么解决

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:mybatis mapper.xml注释带参数的坑怎么解决的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:better-scroll方法怎么在vue2中使用下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18