最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis?mapper.xml?注釋帶參數(shù)的坑及解決

 更新時(shí)間:2022年01月11日 14:20:03   作者:R先森  
這篇文章主要介紹了mybatis?mapper.xml?注釋帶參數(shù)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis mapper.xml 注釋帶參數(shù)的坑

最近做一個(gè)很簡(jiǎn)單的統(tǒng)計(jì)項(xiàng)目,統(tǒng)計(jì)的邏輯產(chǎn)品一直改版,為了便于之后產(chǎn)品返回的時(shí)候快速的切換回老版本的邏輯,就給之前的sql注釋了直接在下面寫了新的sql,注釋的時(shí)候一般我都習(xí)慣性的選中之后Ctrl+/利用編輯器自帶的自動(dòng)注釋功能,這個(gè)時(shí)候編輯器是分兩種情況的:情況一是你之前老的sql沒(méi)有類似<where>這樣帶特殊尖括號(hào)的語(yǔ)句,這個(gè)時(shí)候如果用Ctrl+/的話編輯器會(huì)用'--'也就是sql語(yǔ)句的注釋去注釋你之前的老sql,注釋完之后編輯器并不會(huì)報(bào)錯(cuò)如果比較幸運(yùn)你之前的語(yǔ)句里沒(méi)有參數(shù)的話執(zhí)行也是沒(méi)有問(wèn)題的,但是,注意這個(gè)但是,如果你之前的sql語(yǔ)句帶#{xxxx}或者${xxx}這樣的參數(shù),

形如下面這樣:

-- #{month,jdbcType=VARCHAR}

那么恭喜你,這個(gè)時(shí)候執(zhí)行的話就會(huì)報(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).

這個(gè)時(shí)候你可能會(huì)和我一樣丈二和尚摸不著頭腦,特別是如果之前么有遇見(jiàn)過(guò)這個(gè)問(wèn)題的話,很有可能會(huì)在這里搞很久;情況二是你的老sql有<where>這樣的帶尖括號(hào)的語(yǔ)句,這個(gè)時(shí)候你用Ctrl+/的話,會(huì)自動(dòng)是<!-- xxx-->也就是標(biāo)準(zhǔn)的xml注釋,這個(gè)時(shí)候即使你注釋的xxx包括外部參數(shù)占位,執(zhí)行的時(shí)候也不會(huì)報(bào)錯(cuò),形如下面這樣也不會(huì)有問(wèn)題:

<!-- ?#{month,jdbcType=VARCHAR}-->

這個(gè)問(wèn)題由于之前自己沒(méi)有遇見(jiàn)過(guò)所以這次在這里卡了挺久才試出問(wèn)題原因,至于兩種方式為何會(huì)有所區(qū)別回頭還得好好看看mybatis的源碼,之后再補(bǔ)充到這篇文章里,占用上班時(shí)間做個(gè)記錄

mybatis的xml中注釋需謹(jǐn)慎

報(bào)錯(cuò)內(nèi)容

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

調(diào)試半天,網(wǎng)上查了半天都是# 、$ 用法出錯(cuò),一次次的對(duì)比,一個(gè)個(gè)字找,發(fā)現(xiàn),用法根本沒(méi)問(wèn)題,突然。。??吹搅俗⑨屩械?/p>

#{executorId},想想,也許是這個(gè)的原因呢?然后就給注釋刪了,結(jié)果發(fā)現(xiàn)就是注釋的鍋:

這樣,mybatis仍舊會(huì)把#{}算成一個(gè)帶注入的參數(shù),二SQL認(rèn)出了這個(gè)-- 的注釋

-- 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仍舊會(huì)把#{}算成一個(gè)帶注入的參數(shù)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • postgresql 實(shí)現(xiàn)16進(jìn)制字符串轉(zhuǎn)10進(jìn)制數(shù)字

    postgresql 實(shí)現(xiàn)16進(jìn)制字符串轉(zhuǎn)10進(jìn)制數(shù)字

    這篇文章主要介紹了postgresql 實(shí)現(xiàn)16進(jìn)制字符串轉(zhuǎn)10進(jìn)制數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中

    springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中

    這篇文章主要介紹了springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 不看后悔!揭秘游戲服務(wù)器開(kāi)發(fā)

    不看后悔!揭秘游戲服務(wù)器開(kāi)發(fā)

    剛開(kāi)始時(shí)以為做游戲服務(wù)器和做web差不多,但是經(jīng)過(guò)一段時(shí)間之后,才發(fā)現(xiàn)代碼太多,太亂了,這里我把一些游戲開(kāi)發(fā)方面的東西整理一下,希望能對(duì)那些想做游戲服務(wù)器開(kāi)發(fā)的朋友有所幫助
    2021-06-06
  • Java滾動(dòng)數(shù)組計(jì)算編輯距離操作示例

    Java滾動(dòng)數(shù)組計(jì)算編輯距離操作示例

    這篇文章主要介紹了Java滾動(dòng)數(shù)組計(jì)算編輯距離操作,涉及java字符串與數(shù)組的遍歷、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求

    JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求

    本文主要介紹了JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入

    簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入

    這篇文章主要介紹了簡(jiǎn)單了解Mybatis如何實(shí)現(xiàn)SQL防注入,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • EL表達(dá)式簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    EL表達(dá)式簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    EL全名為Expression Language,這篇文章主要給大家介紹EL表達(dá)式的主要作用及內(nèi)容簡(jiǎn)介,感興趣的朋友一起看看
    2017-07-07
  • SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java多線程中的ThreadPoolExecutor使用解析

    Java多線程中的ThreadPoolExecutor使用解析

    這篇文章主要介紹了Java多線程中的ThreadPoolExecutor使用解析,作為線程池的緩沖,當(dāng)新增線程超過(guò)maximumPoolSize時(shí),會(huì)將新增線程暫時(shí)存放到該隊(duì)列中,需要的朋友可以參考下
    2023-12-12
  • 使用@PathVariable注解如何實(shí)現(xiàn)動(dòng)態(tài)傳值

    使用@PathVariable注解如何實(shí)現(xiàn)動(dòng)態(tài)傳值

    這篇文章主要介紹了使用@PathVariable注解如何實(shí)現(xiàn)動(dòng)態(tài)傳值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論

阳新县| 武清区| 大渡口区| 慈溪市| 内乡县| 抚顺县| 田东县| 琼海市| 襄汾县| 宁波市| 左云县| 宁安市| 东明县| 连州市| 定州市| 巴林左旗| 石台县| 凤台县| 林口县| 三原县| 金阳县| 阳春市| 丹江口市| 修水县| 闵行区| 庄河市| 云浮市| 安泽县| 星子县| 绥芬河市| 塘沽区| 九龙城区| 福州市| 屯留县| 张家港市| 黄大仙区| 黎川县| 出国| 应城市| 甘孜| 永定县|