国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Invalid bound statement (not found)

這篇具有很好參考價值的文章主要介紹了Invalid bound statement (not found)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、遇到的問題

二、分析思路

1、映射文件

2、測試類

三、解決方案


一、遇到的問題

前幾日,有個工作不久的同事找我?guī)退鉀Q一個 Mybatis 的問題。他寫了一個增刪改查,但是在啟動程序的時候報錯:Invalid bound statement (not found) 。他試圖解決該異常,花了一個小時還是沒有解決,所以向我求助。所謂當局者迷,我?guī)退崂砹艘幌麻_發(fā)邏輯,幾分鐘后他發(fā)現(xiàn)了問題,并解決了該異常。剛工作兩三年的開發(fā)者特別容易碰到該異常,但是只要理清思路,就很容解決問題。我將分析問題的思路記錄一下,希望能幫到你。

二、分析思路

Mybatis 開發(fā)有兩種方式,一種是原始 Dao 開發(fā)方式,另一種是 Mapper 動態(tài)代理開發(fā)方式。在開發(fā)項目時,我們會用 Mapper 動態(tài)代理開發(fā)方式,動態(tài)代理會自動幫我們生成 Mapper 的代理類,將細節(jié)封裝起來。但是,在分析問題的時候,我們用原始 Dao 開發(fā)方式,可以讓我們了解到 statement 綁定映射文件的細節(jié)。

下面使用原始 Dao 的開發(fā)方式演示一下 statement 是如何綁定映射文件中的 Sql 語句的。

1、映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.UserMapper">
        <!-- 查詢所有的用戶名 -->
    <select id="findUserNameList" resultType="java.lang.String">
        select user_name userName from user
    </select>
</mapper>

2、測試類

public class Test {

    //會話工廠
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void createSqlSessionFactory() throws IOException {
        // 配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 使用SqlSessionFactoryBuilder從xml配置文件中創(chuàng)建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);

    }

    // 查詢所有的用戶名
    @Test
    public void testFindUserNameById() {
        // 數(shù)據(jù)庫會話實例
        SqlSession sqlSession = null;
        try {
            // 創(chuàng)建數(shù)據(jù)庫會話實例sqlSession
            sqlSession = sqlSessionFactory.openSession();
            // 查詢所有的用戶名
            List<String> list = sqlSession.selectList("com.test.mapper.UserMapper.findUserNameById");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }

    }
}

在上面的測試中,使用了 sqlSession 的 selectList 方法,中間的參數(shù)就是 statement 。該參數(shù)用來確定映射文件中的 Sql 語句,換句話說就是用這個 statement 綁定映射文件中的 Sql 語句。

該參數(shù)是用映射文件中的 namespace 和 select 標簽的 id 組合而成的,在項目是唯一的。示例中映射文件的 namespace 是:com.test.mapper.UserMapper,select 標簽的 id 是:indUserNameById ,所以組合起來的 statement 是 com.test.mapper.UserMapper.findUserNameById

如果 statement 寫錯了,就會導致找不到映射文件中的 Sql 語句,就會報 Invalid bound statement (not found) 。所以造成該異常的原因是 statement 和 Sql 語句不匹配。

在實際項目會使用 Mapper 動態(tài)代理的開發(fā)方式,自動生成 mapper 接口的實現(xiàn)類,就更容易出現(xiàn)該異常了。

三、解決方案

既然知道了造成該異常的原因,就容易解決了,如果通過 statement 找不到映射文件中的 Sql 就會報錯誤:Invalid bound statement (not found) 。在項目中一般都是使用 Mapper 動態(tài)代理,所以我們要解決的也是動態(tài)代理的問題。先說一下 Mapper 動態(tài)代理的實現(xiàn)原理,看完之后你就知道應該怎么解決該異常了。

Mapper 動態(tài)代理只需要開發(fā)定義 Mapper 接口,Mybatis 會根據(jù)接口創(chuàng)建動態(tài)代理對象。使用該種方式開發(fā),需要遵守一定的開發(fā)規(guī)范,規(guī)范如下 4 點:

  1. Mapper.xml 文件中的 namespace 與 mapper 接口的類路徑相同。
  2. Mapper 接口方法名和 Mapper.xml 中定義的每個 statement 的 id 相同
  3. Mapper 接口方法的輸入?yún)?shù)類型和 mapper.xml 中定義的每個 Sql 的 parameterType 的類型相同
  4. Mapper 接口方法的輸出參數(shù)類型和 mapper.xml 中定義的每個 Sql 的 resultType 的類型相同?

所以,我們在使用 Mapper 動態(tài)代理遇到該異常,就是要檢查是否遵守開發(fā)規(guī)范,因為粗心或單詞寫錯了,容易導致程序報錯。

我列了幾個檢查步驟,你跟著步驟檢查一下,肯定能找到問題的所在之處。步驟如下 7 點:

  1. 檢查 target 目錄中有沒有 Mybatis 的映射文件
  2. 檢查 mybatis.mapper-locations 配置,該配置是把 mapper 的位置告訴 Mybatis 。默認是mapper-locations: classpath*:/mapper/**/*.xml
  3. 檢查映射文件是不是放在 resources/mapper 目錄中
  4. 檢查映射文件中的 namespace 與 mapper 接口的類路徑是不是一樣
  5. 檢查映射文件中的 statement 是不是和 Mapper 接口的方法名一樣
  6. 檢查映射文件中的 statement 的 parameterType 和 resultType 是不是和 Mapper 接口的方法中的入?yún)⒑统鰠⒁粯?/li>
  7. 如果你使用 Idea 開發(fā),檢查一下 resources 目錄,在該目錄下創(chuàng)建下級目錄是不能一次性創(chuàng)建的,要創(chuàng)建完成一個目錄后再創(chuàng)建另外的下級目錄

另外,如果你遇到過該異常,并且遇到的錯誤不在上述之中。不妨在留言區(qū)提出,大家一起討論一下,給后來者提個醒,避免遇到坑。文章來源地址http://www.zghlxwxcb.cn/news/detail-428608.html

到了這里,關于Invalid bound statement (not found)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • mybatis plus報錯:Invalid bound statement (not found)

    mybatis plus報錯:Invalid bound statement (not found)

    有的同學,在搭建mybatis plus項目時,遇到Invalid bound statement (not found)的問題,實質(zhì)上是mapper接口和mapper.xml沒有映射起來。 這種情況,常見的問題有以下幾個: 1、mapper.xml 里面的 namespace與實際的mapper類路徑不一致。 這個有個快捷的檢測辦法就是按住ctrl鍵,然后點擊namespace里

    2024年02月04日
    瀏覽(29)
  • Invalid bound statement (not found):常見報錯原因解決

    Invalid bound statement (not found):常見報錯原因解決

    在SpringMVC項目中,通過mapper接口加載映射文件,完成數(shù)據(jù)庫的操作。 報錯:Invalid bound statement (not found): 1、xml文件的namespace不正確 2、XxxMapper.java的方法在XxxMapper.xml中沒有,運行則會報此錯誤 3、XxxMapper.java的方法返回值是List,但是沒有正確配置ResultMap,或者只配置ResultType 4、

    2023年04月27日
    瀏覽(38)
  • Invalid bound statement (not found)的原因以及解決方法

    Invalid bound statement (not found)的原因以及解決方法

    相信我們在學習Mybatis的時候都出現(xiàn)過 Invalid bound statement (not found) 這個錯誤,一般由以下幾種可能導致這個錯誤 例如: mapper: ?對應的mapper.xml 這里建議小伙伴們下載一個插件,方便查看你的xml是否對應了你想對應的mapper接口 有了這個插件,你的接口mapper和對應的mapper.xml都

    2024年02月15日
    瀏覽(31)
  • Invalid bound statement (not found)出現(xiàn)原因和解決方法

    Invalid bound statement (not found)出現(xiàn)原因和解決方法

    出現(xiàn)的原因:mapper接口和mapper.xml文件沒有映射起來。 解決方法: 1、 .mapper.xml中的namespace和實際的mapper文件是否一致 2、 檢查mapper接口中的方法名與mapper.xml文件中的id是否一致 推薦大家去下載MyBatisX插件,可以自動實現(xiàn)mapper接口到mapper.xml之間的映射,既能提高效率,又能避

    2024年02月11日
    瀏覽(33)
  • myBatis plus 調(diào)用基本方法(insert update.... ) Invalid bound statement (not found)

    直接調(diào)用BaseMapper 或者 是Iservice 里面的方法報如下錯,大概率是依賴版本沖突 我的依賴版本如下,解決了這個問題 “org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)” 錯誤通常表示在 MyBatis 中找不到有效的綁定語句。 這個錯誤可能有以下幾個可能的原因: SQL

    2024年02月13日
    瀏覽(27)
  • Mybatis異常Invalid bound statement (not found)原因之Mapper文件配置不匹配

    Mybatis異常Invalid bound statement (not found)原因之Mapper文件配置不匹配

    模擬登錄操作 網(wǎng)頁提示服務器代碼錯誤 后端顯示無法找到Mapper中對應的方法 原因 相信我們在學習Mybatis的時候都出現(xiàn)過 Invalid bound statement (not found) 這個錯誤, 一般由以下幾種可能導致這個錯誤 第一種:mapper.xml中的namespace和實際的mapper文件不一致 第二種:mapper.xml中的id名與

    2024年02月14日
    瀏覽(28)
  • 【報錯解決】org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    【報錯解決】org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    ?對于這種錯誤,一般在于mapper接口與xml文件無法綁定。 解決方案: 1.檢查xml文件名是否與mapper接口名一致。 2.檢查xml文件中namespace是否與mapper接口的全類名一致。(按住ctrl點擊能跳轉(zhuǎn)就沒問題) 3.是否在主啟動類上標注了@MapperScan(“mapper接口所在包的全包名”)或在map

    2024年02月15日
    瀏覽(34)
  • org.apache.ibatis.binding.BindingException:Invalid bound statement (not found)綁定異常出現(xiàn)原因和解決方法

    org.apache.ibatis.binding.BindingException:Invalid bound statement (not found)綁定異常出現(xiàn)原因和解決方法

    綁定異常,(其實出現(xiàn)這個問題實質(zhì)就是mapper接口和mapper.xml文件沒有映射起來。) 異常提示信息如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) :cn.tedu.csmall.server.mapper.BrandMapper.insert 寫XML文件時一定要注意注意再注意, 因為報錯提示會指定到XML中 出現(xiàn)此異常

    2024年02月06日
    瀏覽(31)
  • Junit啟動測試mybatis xml文件BindingException: Invalid bound statement問題

    背景:1、正常啟動,xml文件放在java目錄和resource目錄下均正常 2、junit啟動,xml文件放在resource目錄下正常,放在 java目錄下 報BindingException錯誤 mapperlocation綁定地址為:\\\"classpath:com/a/b/**/*.xml\\\" ? 原因就在于綁定的地址有問題。 ? junit生成的test-classes下的測試類test所在目錄與c

    2023年04月20日
    瀏覽(26)
  • Stata17安裝后遇到Java installation not found問題解決方法

    Stata17安裝后遇到Java installation not found問題解決方法

    初次使用?Stata17的時候你可能會遇到這個問題,在執(zhí)行ssc install aaplot命令的時候,會報報錯: Java installation not found ,這是因為沒有指定Java環(huán)境導致的,我們只需要在stata中指定一下Java的環(huán)境變量就可以解決。 1、下載java17以上的版本: https://www.oracle.com/java/technologies/javase/

    2024年02月11日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包