欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

這個(gè)問題由于之前自己沒有遇見過所以這次在這里卡了挺久才試出問題原因,至于兩種方式為何會(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),用法根本沒問題,突然。。。看到了注釋中的

#{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)文章

  • spring注解在自定義jar包中無法被掃描的解決方案

    spring注解在自定義jar包中無法被掃描的解決方案

    這篇文章主要介紹了spring注解在自定義jar包中無法被掃描的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java基礎(chǔ)類Class使用指南

    Java基礎(chǔ)類Class使用指南

    關(guān)于通過類名訪問class屬性,我朋友問過好幾次了,一直沒明白這個(gè)東西到底是什么?對(duì)此,我參照網(wǎng)友們的博客,總結(jié)了一些小知識(shí),如發(fā)現(xiàn)錯(cuò)誤,希望糾正,謝謝
    2015-12-12
  • 詳解Java的Proxy動(dòng)態(tài)代理機(jī)制

    詳解Java的Proxy動(dòng)態(tài)代理機(jī)制

    Java有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。對(duì)于靜態(tài)代理,其實(shí)就是通過依賴注入,對(duì)對(duì)象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過這種形式來封裝的
    2021-06-06
  • 一文徹底搞懂Java日期時(shí)間類詳解

    一文徹底搞懂Java日期時(shí)間類詳解

    這篇文章主要給大家介紹了關(guān)于Java日期時(shí)間類的相關(guān)資料,Calendar類的功能要比Date類強(qiáng)大很多,可以方便的進(jìn)行日期的計(jì)算,獲取日期中的信息時(shí)考慮了時(shí)區(qū)等問題,需要的朋友可以參考下
    2023-10-10
  • Jenkins?Pipline實(shí)現(xià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方法

    這篇文章主要為大家介紹了修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Maven修改運(yùn)行環(huán)境配置代碼實(shí)例

    Maven修改運(yùn)行環(huán)境配置代碼實(shí)例

    這篇文章主要介紹了Maven修改運(yùn)行環(huán)境配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 關(guān)于SpringBoot+Mybatis報(bào)MapperScan.factoryBean()問題

    關(guān)于SpringBoot+Mybatis報(bào)MapperScan.factoryBean()問題

    解決SpringBoot+Mybatis中的MapperScan.factoryBean()問題,讓你的項(xiàng)目運(yùn)行更順暢!本指南將帶你一步步解決這個(gè)問題,讓你的開發(fā)過程更加高效,不要錯(cuò)過這個(gè)實(shí)用指南,快來一探究竟吧!
    2024-02-02
  • java中關(guān)于return返回值的用法詳解

    java中關(guān)于return返回值的用法詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java中關(guān)于return返回值的用法詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12

最新評(píng)論