国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

2021-10-27 10:15金發只是水一下 Java教程

這篇文章主要介紹了解決SpringBoot整合MybatisPlus分模塊管理遇到的bug,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

這個Bug前前后后折騰了兩天才找到答案,雖說不是完全兩天的工作時間在調試這個問題,但是過程也確實曲折,所以做一下記錄,也當做一次自我反省

背景

SpringBoot 與 MyBatis-Plus 的 pom 依賴

<!-- SpringBoot 版本 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- MyBatis-plus 版本 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>

項目分模塊結構

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

之前一直停留在 SpringBoot 整合其他框架做一些小項目,所以都是把代碼放在一個工程,也沒有進行分模塊管理。

由于公司打算開發新產品,我想嘗試在 SpringBoot 的項目來做分模塊的開發(Maven工程),并且用 MyBatis-Plus 來做持久層框架,也就是將 SpringBoot 做 web模塊, 實體跟Mapper 拆分到 persistence模塊,并將 mapper.xml 文件放在 persistence模塊 的 resources/mapper 目錄下。

在項目分模塊完成之后,并進行代碼移植時并沒有發現問題,因為此時并不需要調用到自定義 mapper.xml 中的 sql 查詢數據庫。但隨著一步一步的完善代碼,也開始需要用到 mapper.xml 的 sql 查詢,此時,在調試時,發現了如下錯誤:

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

即,報找不到對應的 sql

排查原因

排除 mapper.xml 書寫錯誤

首先排除 mapper.xml 中 namespace 或 sql 的 id 寫錯,因為我的開發工具下載了 MybatisX 的插件,mapper.java 與 mapper.xml 都有插件的小圖標,如下圖所示,

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

懷疑:分模塊導致

其次,在先前我已經整合過 SpringBoot 與 MyBatis-Plus 單項目的工程,并沒有這個問題,所以,我懷疑是因為 分模塊導致的原因 導致的,所以,我想 分模塊跟不分模塊的工程 有區別?

區別就是,不分模塊 mapper.xml 文件就在項目 classes 下的 mapper 中,而分模塊后, mapper.xml 文件就在 persistence模塊打出來的 jar 中

錯誤思路:修改pom文件配置resources目錄

所以,發現了這點之后,就開始必應解決方案,但是剛開始我的思路是 錯誤的,我以為項目打包之后,沒有把 persistence模塊的 resources 下 的 mapper 目錄打包進 jar 中 。浪費了一些時間之后,我才想清楚應該先去 persistence模塊 打出來的 jar 中確認有沒有將 resources 下的 mapper/mapper.xml 打包進去。

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

懷疑:Spring Resource時沒有加載 jar 中的 mapper.xml

上面的問題教了自己一課,眼見為實 ,雖然解決 Bug 的過程中,合理的猜測是必要的,但是在有限的結果集中,驗證排除一些錯誤的思路更為重要。就像,經常有人會問我,“為什么我運行老是報找不到類的錯誤”,我就說那你到 tomcat 的發布路徑上看一下 jar 包有沒有發不上去,這其實是一個道理的。

回到問題,為什么Spring Resource時沒有加載 jar 中的 mapper.xml ?必應尋找解決方案,在必應的過程中我才想起了 Spring 的 Resource 加載文件, classpath 與 classpath* 的區別,好久沒有自己手寫搭項目,把這個給忘記了。

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

所以,此時我確信將 application.xml 中 mybatis-plus.mapper-locations 的值改為 classpath*:mapper/*Mapper.xml 即可,如下

#mapper plus
mybatis-plus:
  mapper-locations: classpath*:mapper/*Mapper.xml

懷疑:SpringBoot 跟 MyBatis-Plus 整合的配置哪里不對嗎?

上面的配置修改之后,重新運行,還是報同樣的錯!!!

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

What The Fuck!!!因為我覺得這個 bug 就是由于 classpath:mapper/*Mapper.xml Spring 的 Resource 只能掃描當前應用中的 classpath 下的 mapper 目錄的 mapper.xml 的文件,所以,我又重新必應了 SpringBoot 與 Mybati-plus 的整合配置 ,說到底還是對這個框架不了解,導致走了不少彎路,而且在出問題的時候,沒有堅信自己的判斷,而不斷的嘗試必應出來的結果,使得又浪費了一些時間在這個問題上。

最后必應了一圈后,還是沒有找到解決方案,而且與此相關的問題文章也不多, 我開始迷茫跟急躁了,畢竟已經浪費了這么多的時間,我還是決定先驗證一下我前面深信的東西---- Spring 的 Resource 加載文件, classpath 與 classpath* 的區別 ,所以,我決定自己創建 sqlSessionFactory ,代碼如下

@Bean("sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
    MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
    sqlSessionFactory.setDataSource(datasource);
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resolver.getResources("classpath*:mapper/*Mapper.xml");
    sqlSessionFactory.setMapperLocations(resources);
    MybatisConfiguration configuration = new MybatisConfiguration();
    configuration.setJdbcTypeForNull(JdbcType.NULL);
    configuration.setMapUnderscoreToCamelCase(true);
    configuration.setCacheEnabled(false);
    sqlSessionFactory.setConfiguration(configuration);
    //添加分頁功能
    sqlSessionFactory.setPlugins(new Interceptor[]{
        paginationInterceptor()
    });
    return sqlSessionFactory.getObject();
}

結果是運行通過了!!不過,這也是理所當然的,這就說明了我在 application.xml 中 mybatis-plus 的配置沒生效,相當于又回到了上一個問題。到了這里,我才想到去看 mybatis-plus-boot-starter 里面的源碼!!

沒想到的是,源碼相當容易看,首先,jar 包的目錄結構如下,看名字直接選擇看 MybatisPlusAutoConfiguration 這個配置類

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

打開 MybatisPlusAutoConfiguration 的源碼,直接看 SqlSessionFactory 的創建,如下,在設置 mapper-locations 的判斷處,打下斷點,進行調試

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

并且將前面自定義創建的 SqlSessionFactory 的代碼注釋掉,application.yml 中配置 mapper-locations: classpath*:mapper/*Mapper.xml ,重新運行,進行源碼調試,發現上圖斷點的邏輯,沒有進到 if 的判斷中去,調試的 MybatisPlusProperties 對象結果如下,

解決SpringBoot整合MybatisPlus分模塊管理遇到的bug

!!!What The Fuck!!!我配置的明明是 classpath*:mapper/*Mapper.xml ,怎么變成了 classpath:mapper/*Mapper.xml 可恨的是,我的思路有繞彎了!!!

懷疑:yml 的配置語法對 classpath*:mapper/*Mapper.xml 解析有問題

我都服了我自己了,但確實是這次修改讓我找到了最后的答案,將原本的配置寫法改成了數組,寫法如下,

#mapper plus
mybatis-plus:
  mapper-locations: [classpath*:mapper/*Mapper.xml]

因為對這種配置格式也沒去深究,之前都是一對一的配置項,沒有嘗試過數組的寫法,所以上來就運行報錯了,但是報的是 application.yml 的語法格式有誤。所以,將值加上引號括起來,變成

#mapper plus
mybatis-plus:
  mapper-locations: ["classpath*:mapper/*Mapper.xml"]

重新運行,發現竟然通過了!!!源碼調試的 mapperLocations 的值也是 classpath*:mapper/*Mapper.xml ,此時我以為找到了問題的所在了,就是 yml 的配置語法對 classpath*:mapper/*Mapper.xml 解析有問題 我也對此深信不疑。

結論:開發工具沒有同步配置

在沒寫這筆記前,我還深信問題就是 yml 的語法對值帶有 冒號 的解析時,需要對值用 引號 包起來。但是在寫筆記做記錄的過程中,需要還原場景,在調試的時候,發現并沒有說 需要對帶有冒號的值加上引號包起來 ,這時我才想起來,會不會是 開發工具的問題,在運行的時候,沒有把修改的配置文件同步上去 。經過多次的調試,也證明了這點,有時候項目跑太久,開發工具就會突然出來發難。

搞了半天, 在 application.yml 的配置 classpath*:mapper/*Mapper.xml 是有效的!!!有效的!!!有效的!!! 相當于開發工具的作祟讓我白白浪費了2天時間,但是期間也發現了自身的一下問題,太久沒有遇到錯誤,一味的相信搜索引擎而不去思考,最后還差點 用錯誤的認識,否定了原本正確的東西 。

#mapper plus
mybatis-plus:
  mapper-locations: classpath*:mapper/*Mapper.xml

在發現 application.yml配置修改后沒生效的第一時間,我就應該檢查發布路徑的文件,或者去調試源碼。中間浪費太多的時間陷入盲目的必應搜索答案,做筆記反省一下自己,安定就會退步,堅持學習,永遠不要放棄思考。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_25940921/article/details/88527773

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 特及毛片 | 国产91在线观看 | 色视频免费在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 黄色午夜 | 日操干 | 成人午夜视频网 | 视频精品一区二区 | 亚洲欧洲精品成人久久奇米网 | 欧美一区二区三区久久精品 | 天天干夜干 | 香蕉综合久久 | av亚洲在线 | 国产视频一区二区三区在线观看 | 精品一区二区不卡 | 成人a视频片观看免费 | 538在线 | 亚洲国产精品自拍 | 久久精品亚洲成在人线av网址 | 在线观看国产中文字幕 | 91精品国产日韩91久久久久久 | 欧美一区二区三区的 | 蜜桃av噜噜一区二区三区小说 | 国产精品美女久久久久久久网站 | 午夜精品影院 | 51ⅴ精品国产91久久久久久 | 精品国产青草久久久久福利 | 噜噜噜噜狠狠狠7777视频 | 色在线播放 | 玖玖爱国产| 国产精品一区视频 | 亚洲精品福利 | 欧美午夜一区二区三区 | 亚洲精品日本 | 亚洲国产精品自拍 | 全部免费毛片在线播放 | 91免费观看视频 | 久久亚洲精品中文字幕 | 久久久免费视频看看 | 亚洲精品一区二区三区四区高清 | 国产视频一区在线 |