mybatis?mapper.xml?注釋帶參數(shù)的坑及解決
mybatis mapper.xml 注釋帶參數(shù)的坑
最近做一個很簡單的統(tǒng)計(jì)項(xiàng)目,統(tǒng)計(jì)的邏輯產(chǎn)品一直改版,為了便于之后產(chǎn)品返回的時候快速的切換回老版本的邏輯,就給之前的sql注釋了直接在下面寫了新的sql,注釋的時候一般我都習(xí)慣性的選中之后Ctrl+/利用編輯器自帶的自動注釋功能,這個時候編輯器是分兩種情況的:情況一是你之前老的sql沒有類似<where>這樣帶特殊尖括號的語句,這個時候如果用Ctrl+/的話編輯器會用'--'也就是sql語句的注釋去注釋你之前的老sql,注釋完之后編輯器并不會報(bào)錯如果比較幸運(yùn)你之前的語句里沒有參數(shù)的話執(zhí)行也是沒有問題的,但是,注意這個但是,如果你之前的sql語句帶#{xxxx}或者${xxx}這樣的參數(shù),
形如下面這樣:
-- #{month,jdbcType=VARCHAR}
那么恭喜你,這個時候執(zhí)行的話就會報(bào)很詭異的異常,類似于下面這樣:
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-->也就是標(biāo)準(zhǔn)的xml注釋,這個時候即使你注釋的xxx包括外部參數(shù)占位,執(zhí)行的時候也不會報(bào)錯,形如下面這樣也不會有問題:
<!-- ?#{month,jdbcType=VARCHAR}-->
這個問題由于之前自己沒有遇見過所以這次在這里卡了挺久才試出問題原因,至于兩種方式為何會有所區(qū)別回頭還得好好看看mybatis的源碼,之后再補(bǔ)充到這篇文章里,占用上班時間做個記錄
mybatis的xml中注釋需謹(jǐn)慎
報(bào)錯內(nèi)容
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2)
調(diào)試半天,網(wǎng)上查了半天都是# 、$ 用法出錯,一次次的對比,一個個字找,發(fā)現(xiàn),用法根本沒問題,突然。。??吹搅俗⑨屩械?/p>
#{executorId},想想,也許是這個的原因呢?然后就給注釋刪了,結(jié)果發(fā)現(xiàn)就是注釋的鍋:
這樣,mybatis仍舊會把#{}算成一個帶注入的參數(shù),二SQL認(rèn)出了這個-- 的注釋
-- 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} ))
小結(jié)一下
在mybatis的sql里不是不能寫注釋,而是注釋不能有#{},mybatis仍舊會把#{}算成一個帶注入的參數(shù)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Mybatis之mapper接口多參數(shù)方式
- Mybatis往Mapper.xml文件中傳遞多個參數(shù)問題
- 一文搞懂Mybatis中Mapper配置文件獲取參數(shù)的五種方式
- MyBatis在mapper中傳遞參數(shù)的四種方式
- Mybatis中關(guān)于自定義mapper.xml時,參數(shù)傳遞的方式及寫法
- MyBatis在Mapper中傳遞多個參數(shù)的四種方法詳解
- Mybatis?Mapper中多參數(shù)方法不使用@param注解報(bào)錯的解決
- MyBatis Mapper接受參數(shù)的四種方式代碼解析
- 解決Mybatis mappe同時傳遞 List 和其他參數(shù)報(bào)錯的問題
相關(guān)文章
Jenkins?Pipline實(shí)現(xiàn)及原理示例解析
這篇文章主要為大家介紹了Jenkins?Pipline實(shí)現(xiàn)及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload方法
這篇文章主要為大家介紹了修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Maven修改運(yùn)行環(huán)境配置代碼實(shí)例
這篇文章主要介紹了Maven修改運(yùn)行環(huán)境配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04關(guān)于SpringBoot+Mybatis報(bào)MapperScan.factoryBean()問題
解決SpringBoot+Mybatis中的MapperScan.factoryBean()問題,讓你的項(xiàng)目運(yùn)行更順暢!本指南將帶你一步步解決這個問題,讓你的開發(fā)過程更加高效,不要錯過這個實(shí)用指南,快來一探究竟吧!2024-02-02