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

mybatis Invalid bound statement(not found)排坑記錄

 更新時間:2024年06月13日 11:38:52   作者:heling_m6ss  
這篇文章主要介紹了mybatis Invalid bound statement(not found)排坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

之前幫同事解決mybatis Invalid bound statement (not found):這個問題,最近看到很多人也遇到這樣的問題,所以就記錄一下出現(xiàn)這種情況的幾種情況。

問題分析

出現(xiàn) Invalid bound statement (not found) 這個錯誤的原因:

是根據(jù) mapper接口的全路徑 以"."(點號)與方法名拼接成字符串,作為唯一key(下面將以key代替 ) 到 Map<String, MappedStatement> mappedStatements (后續(xù)已map 代替該對象)中去獲取對應(yīng)的MappedStatement, 如果獲取不到就報這個錯誤。

根據(jù)上面的流程,也就解釋了為什么mapper 中的方法不能重載的原因。因為獲取MappedStatement 是根類和方法名有關(guān),與參數(shù)無關(guān)。所以不能重載。

繼續(xù)分析Invalid bound statement 這個錯誤,出現(xiàn)這個錯誤是因為獲取不到MappedStatement,也就是說在map 容器中根據(jù)key 去獲取值,沒有獲取到。

解決

那么問題來了,什么情況下在map中根據(jù)key 獲取不到值呢?

其實獲取不到就兩種情況。

  • 第一種情況: 就是map 是一個空集合。
  • 第二種情況:map中沒有這個key (也就是說key值不對)

什么情況下mappedStatements 這個map 為空呢?

回答這個問題要明白mybatis 的原理。

在項目啟動的過程中,會掃描并解析掃描到的mapper.xml 文件,將xml文件的namespace 與select 、update 、insert、delete 標簽的id 以 namespace.id 的形式組成一個唯一的key ,將sql語句封裝成一個MappedStatement 對象作為value存儲在mappedStatements 這個map 集合中。

所以當map集合為空,說明mapper.xml 沒有被容器掃描到。

那什么情況下項目中有mapper.xml 文件卻沒有被掃描到呢?

回答這個問題,要清楚mybatis mapper.xml 文件的加載目錄。

當我們沒有在配置文件中配置指定目錄或者配置配置錯誤的文件地址。

 mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml

在容器啟動的時候會到配置文件指定的目錄和mapper 接口所在的包中查找,如果查找不到map集合就是空的。

這時候有的人該問

配置文件配置的mapper.xml 文件地址沒有錯誤,為什么map 還是空的?

如果出現(xiàn)這個問題,我們需要排查一下target 目錄中是否有mapper.xml 文件 因為maven 編譯打包 會將代碼編譯打包成target文件中,程序運行也是讀取加載該目錄下的文件,而不是我們項目目錄。

這時需要在pom 文件build中添加如下配置

<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>`

map為空總結(jié)

1、 檢查mapper的xml文件 是否在mapper 接口包中。如果不在,說明指定了目錄(目前一般都是在resource 資源目錄下新建文件夾) 如果指定了目錄 需要在配置文件中配置指定的目錄。

注意:在resource 目錄下創(chuàng)建多級目錄時,要一層一層創(chuàng)建,不要像創(chuàng)建Java目錄一下以"."隔開,這樣是不對的。

2、項目配置沒有問題,還出現(xiàn)這個問題,排查一下target 目錄中是否有mapper.xml 。沒有則說明maven 打包的時候沒有將xml 文件打包進jar中,需要在pom中添加resource配置信息。

下面來說說第二種情況:key 值不正確

1、這種情況 需要排查mapper 接口全路徑 與 mapper xml 文件中的namespace 配置是否一致。

這里有個驗證技巧:

按住Ctrl 鍵 鼠標點擊接口名 看看是否能正常跳轉(zhuǎn)到接口中,如果能正常跳轉(zhuǎn),則說明映射成功,如果不能跳轉(zhuǎn),則說明namespace 配置的不正確,需要修改。

2、隱射成功,下一步拷貝接口中的方法名 到xml 文件中查找是否有對應(yīng)的sql,排查xml sql 的id值是否與方法名一致。(注意空格)

這里也有一個排錯技巧:

在idea 上安裝 Free Mybatis plugin插件,這樣 按住Ctrl 鍵 點擊id 看是否能跳轉(zhuǎn)到接口中對應(yīng)的方法上。如果不能則說明id 的值不對,修改成方法名即可。

看到這里估計有人又該問了

我怎么知道m(xù)ap中是否為空呢?怎么知道key是不正確呢?

如果有看源碼能力的,可以debug項目 追源碼。

如果不想看源碼的,我這里給一個很直接的方式。debug模式啟動項目后,記住是在項目啟動后,在mybatis 源碼中打斷點,然后請求 debug查看。

千萬別在啟動項目前打斷點,因為項目啟動加載也會走這里,這樣會看迷糊的。記住是啟動項目后,訪問前 打斷點

總結(jié)

這是我目前能找到錯誤的原因和解決的方式方法。

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

相關(guān)文章

  • SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn)

    SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn)

    Prometheus作為一個開源的監(jiān)控和告警工具,以其強大的數(shù)據(jù)采集、存儲和查詢能力,受到了眾多開發(fā)者的青睞,本文主要介紹了SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn),感興趣的可以了解一下
    2024-07-07
  • Java 方法遞歸的思路詳解

    Java 方法遞歸的思路詳解

    程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。但是如果沒終止條件會造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件,接下來講解一下學(xué)習(xí)遞歸的思路
    2022-04-04
  • MyBatis中批量插入的三個關(guān)鍵優(yōu)化技巧與避坑指南

    MyBatis中批量插入的三個關(guān)鍵優(yōu)化技巧與避坑指南

    這篇文章主要為大家詳細介紹了MyBatis中批量插入的三個關(guān)鍵優(yōu)化技巧與避坑指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-01-01
  • MyBatis discriminator標簽原理實例解析

    MyBatis discriminator標簽原理實例解析

    這篇文章主要為大家介紹了MyBatis discriminator標簽實現(xiàn)原理實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 基于UDP協(xié)議實現(xiàn)聊天系統(tǒng)

    基于UDP協(xié)議實現(xiàn)聊天系統(tǒng)

    這篇文章主要為大家詳細介紹了基于UDP協(xié)議實現(xiàn)聊天系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Java使用icepdf將pdf文件按頁轉(zhuǎn)成圖片

    Java使用icepdf將pdf文件按頁轉(zhuǎn)成圖片

    這篇文章主要為大家詳細介紹了Java使用icepdf將pdf文件按頁轉(zhuǎn)成圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • SpringBoot集成Milvus和deeplearning4j實現(xiàn)圖搜圖功能

    SpringBoot集成Milvus和deeplearning4j實現(xiàn)圖搜圖功能

    Milvus?是一種高性能、高擴展性的向量數(shù)據(jù)庫,可在從筆記本電腦到大型分布式系統(tǒng)等各種環(huán)境中高效運行,Deeplearning4j(DL4J)是一個開源的深度學(xué)習(xí)框架,專門為Java和Scala開發(fā),本文給大家介紹了SpringBoot集成Milvus和deeplearning4j實現(xiàn)圖搜圖功能
    2024-10-10
  • java 注解實現(xiàn)一個可配置線程池的方法示例

    java 注解實現(xiàn)一個可配置線程池的方法示例

    這篇文章主要介紹了java 注解實現(xiàn)一個可配置線程池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 解決TreeSet類的排序問題

    解決TreeSet類的排序問題

    本文介紹TreeSet支持兩種排序方法:自然排序和定制排序。TreeSet默認采用自然排序。詳細請看下文
    2015-09-09
  • mybatis plus自動生成器解析(及遇到的坑)

    mybatis plus自動生成器解析(及遇到的坑)

    這篇文章主要介紹了mybatis-plus自動生成器及遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

徐汇区| 芜湖县| 福安市| 汉寿县| 垫江县| 高淳县| 长岭县| 乐山市| 淮阳县| 张家口市| 盱眙县| 五寨县| 运城市| 开鲁县| 久治县| 中山市| 改则县| 汉川市| 建宁县| 丹东市| 略阳县| 济南市| 阜宁县| 襄汾县| 将乐县| 阜新市| 屯门区| 巴南区| 措勤县| 晋宁县| 玛曲县| 平和县| 太仓市| 兴山县| 台中县| 哈尔滨市| 信阳市| 汉源县| 泗阳县| 丰台区| 永济市|