文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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} OR dept.parentId = #{executorId} OR parentId in ( SELECT id from user_department
-- WHERE user_department.id = #{executorId} OR user_department.parentId = #{executorId} ))

小结一下

在mybatis的sql里不是不能写注释,而是注释不能有#{},mybatis仍旧会把#{}算成一个带注入的参数

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯