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

mybatis整合springboot報BindingException:Invalid?bound?statement?(not?found)異常解決

 更新時間:2024年01月28日 09:50:50   作者:沉澤·  
這篇文章主要給大家介紹了關于mybatis整合springboot報BindingException:Invalid?bound?statement?(not?found)異常的解決辦法,這個錯誤通常是由于Mapper文件中的statement?id與Java代碼中的方法名不一致導致的,需要的朋友可以參考下

一、前言

本文的mybatis是與springboot整合時出現(xiàn)的異常,若使用的不是基于springboot,解決思路也大體一樣的。

二、從整合mybatis的三個步驟排查問題

但在這之前,我們先要知道整合mybatis的三個重要的工作,如此才能排查,且往下看。

2.1 pom.xml配置**Mapper.xml文件的構(gòu)建路徑

我們打開pom文件如下:

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

這部分代碼的作用是指定需要編譯到taget目錄下的資源文件。我們的程序運行,都是執(zhí)行編譯好的taget目錄下的內(nèi)容,若taget里找不到xml文件資源就會報錯Invalid bound statement (not found)。

每個人的項目配置都可能有些區(qū)別,但在這里我們只需要關注<includes>標簽即可。還有對于不同的項目,xml的存放位置也可能不同,有的存在于src/main/java代碼下,有的存在于src/main/resources。

<include>**/*.xml</include>
這行代碼是用于構(gòu)建存在于src/main/java代碼中的xml文件。

<include></include>
<include>**/.xml</include>
這行代碼是用于構(gòu)建存在于src/main/resources代碼中的所有文件。

上述,我們可以排查第一個可能拋出Invalid bound statement (not found)異常的情況,我們可以通過查看編譯好的taget目錄,如下:

情況一:

原代碼文件目錄:

編譯失敗的情況:

編譯成功的情況:

情況二:

源代碼文件目錄:

編譯失?。?/p>

編譯成功:

有時,一直編譯不成功,那就將taget重新刪除,再編譯。

2.2 配置mapper類的包掃描路徑

這個步驟與Invalid bound statement (not found)異常無關,但是它也是整合mybatis重要的步驟之一,這里也說明一下,有兩種方式實現(xiàn),可根據(jù)自己的項目情況使用。(兩者擇其一)

通過注解的方式掃描:

通過配置類方式掃描:

這個步驟的目的是將我們定義的mapper類裝配到我們的ioc容器中。

若沒有掃描,啟動時就會直接報找不到mapper的錯誤,無法運行項目。

2.3 application.yml文件中配置**Mapper.xml文件的掃描路徑

這個配置若不正確,也會導致Invalid bound statement (not found)異常。值得一說的是,這一步驟的掃描是建立在步驟一的基礎之上的,若編譯好的taget目錄都沒有目標文件,那這一步驟就更不用說了。

一:

這里的掃描路徑配置,還需要注意自己的項目使用的原始mybatis還是mybatis-plus,它們的配置也有區(qū)別的,如下:

原始mybatis:

mybatis:
  mapper-locations: classpath:/cn/anycase/demo/mapper/xml/*Mapper.xml

mybatis-plus:

mybatis-plus:
  mapper-locations: classpath:cn/anycase/demo/mapper/xml/*.xml

本例用的是mybatis-plus:

二:

使用mybatis-plus,當xml和mapper類在同級目錄時可以省略這個掃描路徑的配置,所以我們看到的有些項目少了這個配置(mybatis應該做了默認的掃描操作,這里不做深究),但它并沒有錯,且能正常運行。(原始mybatis是否也可以,本人未做相關測試)

三:

還有一個需要注意的點,前面步驟一說了,mapper.xml文件可能存在于src/main/java代碼中,或存在于src/main/resources資源中,因此我們的配置路徑也有所不同,如下:

Invalid bound statement (not found)這個異常,在常規(guī)下,通過上述的三個步驟可以百分百解決。

三、其他情況的Invalid bound statement (not found)異常

3.1 文件名導致的異常

上述截圖的文件目錄,在運行過程中也出現(xiàn)了Invalid bound statement (not found)異常,仔細檢查了原代碼xml、targe下的xml目錄、yml中配置的掃描目錄,看似正確了但其實是有問題的。

源代碼目錄的"mybatis.mapper"這個展示沒問題,但target目錄下的"mybatis.mapper"這個展示有問題,正常編譯好的target文件目錄都會是按層級展示的,但是這里確是連在了一起。所以發(fā)現(xiàn)問題了,就是在創(chuàng)建mybatis/mapper層級目錄的時候,失誤創(chuàng)建了名字為"mybatis.mapper"目錄。

解決方案:刪除mybatis.mapper,重新建立,先建mybatis文件夾,再建立mapper文件夾,最后再建立.xml文件。

3.2 因為擴展的配置類導致yml掃描路徑配置不生效

這是另一種出現(xiàn)Invalid bound statement (not found)異常的情況,如下截圖

如圖所示,我們的各項步驟和配置都檢查,仍舊不發(fā)現(xiàn)任何問題,但一當運行時就會報錯,這很讓人百思不得其解。。。。。但其實問題肯定是出在配置里頭,是不是哪個地方出現(xiàn)了覆蓋,導致掃描路徑不生效?

有了這個想法,我們就可以檢查源代碼中的所有關于mybatis的配置類。最后,我們發(fā)現(xiàn)了一個類,如下:

源代碼:

@Configuration
public class MybatisPlusConfig implements EnvironmentAware {

    Environment env;

    @Bean("primary")
    @Primary
    public DataSource dataSource() throws ClassNotFoundException {
        return DataSourceBuilder.create()
                .url(env.getProperty("spring.datasource.url"))
                .type((Class<? extends DataSource>) Class.forName(env.getProperty("spring.datasource.type")))
                .driverClassName(env.getProperty("spring.datasource.driverClassName"))
                .username(env.getProperty("spring.datasource.username"))
                .password(env.getProperty("spring.datasource.password"))
                .build();
    }

    @Bean("mainsf")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("primary") DataSource dataSource,
                                               GlobalConfiguration globalConfiguration) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        sqlSessionFactory.setConfiguration(configuration);
        Interceptor[] plugins;
        plugins = new Interceptor[]{new PaginationInterceptor()};
        sqlSessionFactory.setPlugins(plugins);
        sqlSessionFactory.setGlobalConfig(globalConfiguration);
        return sqlSessionFactory.getObject();
    }

    @Bean
    public GlobalConfiguration globalConfiguration() {
        GlobalConfiguration conf = new GlobalConfiguration();
        conf.setIdType(1);
        return conf;
    }

    @Override
    public void setEnvironment(Environment environment) {
        this.env = environment;
    }
}

問題就發(fā)現(xiàn)了,這個配置類中自定義了一個SqlSessionFactory ,里邊也配置了MybatisConfiguration相關的東西,因此我們yml里面的配置mybatis-plus. mapper-locations便失效了。

  • 解決方案一:將這個配置類里相關的mybatis配置去掉。
  • 解決方案二:將xml挪到mapper類的同級目錄下。(因為默認會掃描mapper類的同級xml)

3.3 方法名和statement ID需要一致

這個錯誤是比較沒水準,這里不做贅述。

總結(jié)

到此這篇關于mybatis整合springboot報BindingException:Invalid bound statement (not found)異常解決的文章就介紹到這了,更多相關BindingException:Invalid bound statement (not found)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Sentinel流量控制限流框架的原理與使用

    詳解Sentinel流量控制限流框架的原理與使用

    Sentinel 是一個高可用、高擴展、高穩(wěn)定性的開源流量控制和熔斷降級框架,可以在分布式系統(tǒng)中實現(xiàn)實時的流量控制,下面就來和大家聊聊是具體如何操作的吧
    2023-05-05
  • SpringMVC中RequestParam注解的簡單理解

    SpringMVC中RequestParam注解的簡單理解

    @RequestMapping RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上,下面這篇文章主要給大家介紹了關于SpringMVC中RequestParam注解的簡單理解,需要的朋友可以參考下
    2022-03-03
  • spring boot metrics監(jiān)控指標使用教程

    spring boot metrics監(jiān)控指標使用教程

    這篇文章主要為大家介紹了針對應用監(jiān)控指標暴露spring boot metrics監(jiān)控指標的使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 子線程任務發(fā)生異常時主線程事務回滾示例過程

    子線程任務發(fā)生異常時主線程事務回滾示例過程

    這篇文章主要為大家介紹了子線程任務發(fā)生了異常時主線程事務如何回滾的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java中indexOf()的用法小結(jié)

    Java中indexOf()的用法小結(jié)

    這篇文章主要介紹了Java中indexOf()的用法小結(jié),indexOf()有四種方法,用來查找某個字符或字符串的位置,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • SpringBoot中如何打印Http請求日志

    SpringBoot中如何打印Http請求日志

    所有針對第三方的請求都強烈推薦打印請求日志,本文主要介紹了SpringBoot中如何打印Http請求日志,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java替換int數(shù)組中重復數(shù)據(jù)的方法示例

    Java替換int數(shù)組中重復數(shù)據(jù)的方法示例

    這篇文章主要介紹了Java替換int數(shù)組中重復數(shù)據(jù)的方法,涉及java針對數(shù)組的遍歷、轉(zhuǎn)換、判斷等相關操作技巧,需要的朋友可以參考下
    2017-06-06
  • 解決使用mybatis-plus時,生成的SQL大寫變小寫加下劃線問題

    解決使用mybatis-plus時,生成的SQL大寫變小寫加下劃線問題

    這篇文章主要介紹了解決使用mybatis-plus時,生成的SQL大寫變小寫加下劃線問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java如何重寫object類的equals方法詳解

    Java如何重寫object類的equals方法詳解

    這篇文章主要給大家介紹了關于Java如何重寫object類的equals方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Mybatis傳list參數(shù)調(diào)用oracle存儲過程的解決方法

    Mybatis傳list參數(shù)調(diào)用oracle存儲過程的解決方法

    怎么利用MyBatis傳List類型參數(shù)到數(shù)據(jù)庫存儲過程中實現(xiàn)批量插入數(shù)據(jù)?接下來通過本文給大家介紹Mybatis傳list參數(shù)調(diào)用oracle存儲過程,需要的朋友可以參考下
    2017-03-03

最新評論