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

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

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

一、前言

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

二、從整合mybatis的三個(gè)步驟排查問(wèn)題

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

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

我們打開(kāi)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目錄下的資源文件。我們的程序運(yùn)行,都是執(zhí)行編譯好的taget目錄下的內(nèi)容,若taget里找不到xml文件資源就會(huì)報(bào)錯(cuò)Invalid bound statement (not found)。

每個(gè)人的項(xiàng)目配置都可能有些區(qū)別,但在這里我們只需要關(guān)注<includes>標(biāo)簽即可。還有對(duì)于不同的項(xiàng)目,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代碼中的所有文件。

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

情況一:

原代碼文件目錄:

編譯失敗的情況:

編譯成功的情況:

情況二:

源代碼文件目錄:

編譯失?。?/p>

編譯成功:

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

2.2 配置mapper類的包掃描路徑

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

通過(guò)注解的方式掃描:

通過(guò)配置類方式掃描:

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

若沒(méi)有掃描,啟動(dòng)時(shí)就會(huì)直接報(bào)找不到mapper的錯(cuò)誤,無(wú)法運(yùn)行項(xiàng)目。

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

這個(gè)配置若不正確,也會(huì)導(dǎo)致Invalid bound statement (not found)異常。值得一說(shuō)的是,這一步驟的掃描是建立在步驟一的基礎(chǔ)之上的,若編譯好的taget目錄都沒(méi)有目標(biāo)文件,那這一步驟就更不用說(shuō)了。

一:

這里的掃描路徑配置,還需要注意自己的項(xiàng)目使用的原始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,當(dāng)xml和mapper類在同級(jí)目錄時(shí)可以省略這個(gè)掃描路徑的配置,所以我們看到的有些項(xiàng)目少了這個(gè)配置(mybatis應(yīng)該做了默認(rèn)的掃描操作,這里不做深究),但它并沒(méi)有錯(cuò),且能正常運(yùn)行。(原始mybatis是否也可以,本人未做相關(guān)測(cè)試)

三:

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

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

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

3.1 文件名導(dǎo)致的異常

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

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

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

3.2 因?yàn)閿U(kuò)展的配置類導(dǎo)致yml掃描路徑配置不生效

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

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

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

源代碼:

@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;
    }
}

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

  • 解決方案一:將這個(gè)配置類里相關(guān)的mybatis配置去掉。
  • 解決方案二:將xml挪到mapper類的同級(jí)目錄下。(因?yàn)槟J(rèn)會(huì)掃描mapper類的同級(jí)xml)

3.3 方法名和statement ID需要一致

這個(gè)錯(cuò)誤是比較沒(méi)水準(zhǔn),這里不做贅述。

總結(jié)

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

相關(guān)文章

  • java高并發(fā)的線程中斷的幾種方式詳解

    java高并發(fā)的線程中斷的幾種方式詳解

    這篇文章主要介紹了Java線程中斷機(jī)制幾種方法及示例,向大家分享了這幾種方法的介紹幾代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2021-10-10
  • JavaWeb中異步交互的關(guān)鍵Ajax詳解

    JavaWeb中異步交互的關(guān)鍵Ajax詳解

    這篇文章主要給大家介紹了關(guān)于JavaWeb中異步交互關(guān)鍵Ajax的相關(guān)資料,在javaweb中,ajax是前后臺(tái)交互的技術(shù),可以實(shí)現(xiàn)異步請(qǐng)求,不用刷新整個(gè)頁(yè)面就可以完成操作,需要的朋友可以參考下
    2023-07-07
  • 用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Spring底層核心源碼原理解析

    Spring底層核心源碼原理解析

    這篇文章主要介紹了Spring底層核心源碼原理解析,當(dāng)在某個(gè)方法上加了@Transactional注解后,就表示該方法在調(diào)用時(shí)會(huì)開(kāi)啟Spring事務(wù),而這個(gè)方法所在的類所對(duì)應(yīng)的Bean對(duì)象會(huì)是該類的代理對(duì)象,需要的朋友可以參考下
    2023-09-09
  • Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Springboot整合多數(shù)據(jù)源代碼示例詳解

    Springboot整合多數(shù)據(jù)源代碼示例詳解

    這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring注解之@Conditional使用解析

    Spring注解之@Conditional使用解析

    這篇文章主要介紹了Spring注解之@Conditional使用解析,@Conditional注解可以說(shuō)是SpringBoot的條件注解,表示組件只有在所有指定條件都匹配時(shí)才有資格注冊(cè),條件是可以在 bean 定義注冊(cè)之前??以編程方式確定的任何狀態(tài),需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)將列表數(shù)據(jù)導(dǎo)出為PDF文件并添加水印

    Java實(shí)現(xiàn)將列表數(shù)據(jù)導(dǎo)出為PDF文件并添加水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)把列表數(shù)據(jù)導(dǎo)出為PDF文件,同時(shí)加上PDF水印,文中的示例代碼講解詳細(xì),需要的可以參考下
    2024-02-02
  • SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式

    SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式

    這篇文章主要介紹了SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解決springboot讀取application.properties中文亂碼問(wèn)題

    解決springboot讀取application.properties中文亂碼問(wèn)題

    初用properties,讀取java properties文件的時(shí)候如果value是中文,會(huì)出現(xiàn)亂碼的問(wèn)題,所以本文小編將給大家介紹如何解決springboot讀取application.properties中文亂碼問(wèn)題,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

墨江| 阿克陶县| 灵川县| 常州市| 湘乡市| 贞丰县| 怀安县| 深州市| 胶州市| 远安县| 政和县| 深泽县| 改则县| 花莲县| 乌鲁木齐县| 拉孜县| 巴里| 察雅县| 满城县| 宣武区| 成安县| 资中县| 朝阳县| 堆龙德庆县| 鸡东县| 拉萨市| 谢通门县| 平舆县| 报价| 项城市| 渭源县| 龙山县| 海淀区| 扬州市| 昭觉县| 扎兰屯市| 镇康县| 蚌埠市| 洛南县| 东丽区| 睢宁县|