日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:37日期:2023-02-21 17:53:32
前言

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

背景

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>

項(xiàng)目分模塊結(jié)構(gòu)

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

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

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

在項(xiàng)目分模塊完成之后,并進(jìn)行代碼移植時(shí)并沒有發(fā)現(xiàn)問題,因?yàn)榇藭r(shí)并不需要調(diào)用到自定義 mapper.xml 中的 sql 查詢數(shù)據(jù)庫。但隨著一步一步的完善代碼,也開始需要用到 mapper.xml 的 sql 查詢,此時(shí),在調(diào)試時(shí),發(fā)現(xiàn)了如下錯(cuò)誤:

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

即,報(bào)找不到對(duì)應(yīng)的 sql

排查原因排除 mapper.xml 書寫錯(cuò)誤

首先排除 mapper.xml 中 namespace 或 sql 的 id 寫錯(cuò),因?yàn)槲业拈_發(fā)工具下載了 MybatisX 的插件,mapper.java 與 mapper.xml 都有插件的小圖標(biāo),如下圖所示,

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

懷疑:分模塊導(dǎo)致

其次,在先前我已經(jīng)整合過 SpringBoot 與 MyBatis-Plus 單項(xiàng)目的工程,并沒有這個(gè)問題,所以,我懷疑是因?yàn)?分模塊導(dǎo)致的原因 導(dǎo)致的,所以,我想 分模塊跟不分模塊的工程 有區(qū)別?

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

錯(cuò)誤思路:修改pom文件配置resources目錄

所以,發(fā)現(xiàn)了這點(diǎn)之后,就開始必應(yīng)解決方案,但是剛開始我的思路是 錯(cuò)誤的,我以為項(xiàng)目打包之后,沒有把 persistence模塊的 resources 下 的 mapper 目錄打包進(jìn) jar 中 。浪費(fèi)了一些時(shí)間之后,我才想清楚應(yīng)該先去 persistence模塊 打出來的 jar 中確認(rèn)有沒有將 resources 下的 mapper/mapper.xml 打包進(jìn)去。

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

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

上面的問題教了自己一課,眼見為實(shí) ,雖然解決 Bug 的過程中,合理的猜測(cè)是必要的,但是在有限的結(jié)果集中,驗(yàn)證排除一些錯(cuò)誤的思路更為重要。就像,經(jīng)常有人會(huì)問我,“為什么我運(yùn)行老是報(bào)找不到類的錯(cuò)誤”,我就說那你到 tomcat 的發(fā)布路徑上看一下 jar 包有沒有發(fā)不上去,這其實(shí)是一個(gè)道理的。

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

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

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

#mapper plusmybatis-plus: mapper-locations: classpath*:mapper/*Mapper.xml懷疑:SpringBoot 跟 MyBatis-Plus 整合的配置哪里不對(duì)嗎?

上面的配置修改之后,重新運(yùn)行,還是報(bào)同樣的錯(cuò)!!!

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

What The Fuck!!!因?yàn)槲矣X得這個(gè) bug 就是由于 classpath:mapper/*Mapper.xml Spring 的 Resource 只能掃描當(dāng)前應(yīng)用中的 classpath 下的 mapper 目錄的 mapper.xml 的文件,所以,我又重新必應(yīng)了 SpringBoot 與 Mybati-plus 的整合配置 ,說到底還是對(duì)這個(gè)框架不了解,導(dǎo)致走了不少彎路,而且在出問題的時(shí)候,沒有堅(jiān)信自己的判斷,而不斷的嘗試必應(yīng)出來的結(jié)果,使得又浪費(fèi)了一些時(shí)間在這個(gè)問題上。

最后必應(yīng)了一圈后,還是沒有找到解決方案,而且與此相關(guān)的問題文章也不多, 我開始迷茫跟急躁了,畢竟已經(jīng)浪費(fèi)了這么多的時(shí)間,我還是決定先驗(yàn)證一下我前面深信的東西---- Spring 的 Resource 加載文件, classpath 與 classpath* 的區(qū)別 ,所以,我決定自己創(chuàng)建 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();}

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

沒想到的是,源碼相當(dāng)容易看,首先,jar 包的目錄結(jié)構(gòu)如下,看名字直接選擇看 MybatisPlusAutoConfiguration 這個(gè)配置類

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

打開 MybatisPlusAutoConfiguration 的源碼,直接看 SqlSessionFactory 的創(chuàng)建,如下,在設(shè)置 mapper-locations 的判斷處,打下斷點(diǎn),進(jìn)行調(diào)試

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

并且將前面自定義創(chuàng)建的 SqlSessionFactory 的代碼注釋掉,application.yml 中配置 mapper-locations: classpath*:mapper/*Mapper.xml ,重新運(yùn)行,進(jìn)行源碼調(diào)試,發(fā)現(xiàn)上圖斷點(diǎn)的邏輯,沒有進(jìn)到 if 的判斷中去,調(diào)試的 MybatisPlusProperties 對(duì)象結(jié)果如下,

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

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

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

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

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

因?yàn)閷?duì)這種配置格式也沒去深究,之前都是一對(duì)一的配置項(xiàng),沒有嘗試過數(shù)組的寫法,所以上來就運(yùn)行報(bào)錯(cuò)了,但是報(bào)的是 application.yml 的語法格式有誤。所以,將值加上引號(hào)括起來,變成

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

重新運(yùn)行,發(fā)現(xiàn)竟然通過了!!!源碼調(diào)試的 mapperLocations 的值也是 classpath*:mapper/*Mapper.xml ,此時(shí)我以為找到了問題的所在了,就是 yml 的配置語法對(duì) classpath*:mapper/*Mapper.xml 解析有問題 我也對(duì)此深信不疑。

結(jié)論:開發(fā)工具沒有同步配置

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

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

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

在發(fā)現(xiàn) application.yml配置修改后沒生效的第一時(shí)間,我就應(yīng)該檢查發(fā)布路徑的文件,或者去調(diào)試源碼。中間浪費(fèi)太多的時(shí)間陷入盲目的必應(yīng)搜索答案,做筆記反省一下自己,安定就會(huì)退步,堅(jiān)持學(xué)習(xí),永遠(yuǎn)不要放棄思考。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费一二一二在线视频| 国产+成+人+亚洲欧洲在线| 不卡一区综合视频| 国产精品日本| 中文字幕日韩欧美精品高清在线| 亚洲中午字幕| 日韩精品亚洲专区| 国产日产精品一区二区三区四区的观看方式| 青青草视频一区| 开心激情综合| 亚洲高清av| 日韩精品成人在线观看| 久久99偷拍| 亚洲手机视频| 亚洲精品美女91| 日韩综合一区| 99综合视频| 麻豆视频一区二区| 欧美+亚洲+精品+三区| 午夜性色一区二区三区免费视频| 天堂va蜜桃一区二区三区| 日韩精品免费视频一区二区三区| 欧美激情麻豆| 午夜精品婷婷| 精品一区二区三区中文字幕视频 | 亚洲夜间福利| 91成人小视频| 黑丝一区二区| 国产亚洲久久| 999久久久91| 国产精品一区二区免费福利视频| 99精品在线| 久久的色偷偷| 视频一区二区中文字幕| 国产欧美日韩影院| 快she精品国产999| 午夜久久福利| 天堂va在线高清一区| 日韩高清一级| 美女视频黄 久久| 国产精品久久久久蜜臀| 欧美成人基地| 国产视频一区三区| 日本在线视频一区二区| 日本不卡的三区四区五区| 日韩精品免费一区二区夜夜嗨| 欧美一区自拍| 国产一二在线播放| 五月婷婷六月综合| 日本99精品| 国产盗摄——sm在线视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲乱亚洲高清| 日韩免费福利视频| 精品国产成人| 青青在线精品| 亚洲精品乱码| 亚洲精品在线观看91| 欧美xxxx中国| 伊伊综合在线| 亚洲午夜黄色| 免费的成人av| 国产精品亚洲四区在线观看| 精品在线网站观看| 在线看片福利| 在线精品视频在线观看高清| 亚洲一区国产一区| 久久亚洲美女| 国产高清日韩| 91精品婷婷色在线观看| 91精品国产成人观看| 自拍日韩欧美| 国产欧美一区二区三区米奇| 精品三级在线观看视频| 久久高清精品| 在线国产日韩| 免费看久久久| 不卡在线一区二区| 日韩精品亚洲专区| 97精品一区二区| 91久久国产| 日韩不卡一二三区| 久久久久伊人| 亚洲网站视频| 精品深夜福利视频| 欧美13videosex性极品| 日韩手机在线| 首页国产欧美日韩丝袜| 在线看片国产福利你懂的| 国产精品片aa在线观看| 免费高清在线一区| 日韩成人午夜精品| 久热re这里精品视频在线6| 国产日韩免费| 91精品xxx在线观看| 日本午夜精品一区二区三区电影| 久久精品国产亚洲夜色av网站| 久久免费视频66| 国产精品网站在线看| 午夜久久av| 中文亚洲免费| 好看不卡的中文字幕| 91精品国产福利在线观看麻豆| 日本不卡免费高清视频在线| 国产成人精品一区二区免费看京 | 黄毛片在线观看| 精品美女在线视频| 日本少妇精品亚洲第一区| 视频一区视频二区中文字幕| 在线亚洲一区| 欧美日韩免费看片| 精品三级久久| 久久久夜夜夜| 免费观看不卡av| 最新亚洲一区| 亚州欧美在线| 国产精品久久亚洲不卡| 日本特黄久久久高潮| 亚洲综合电影| 国产欧美日韩视频在线| 国产视频欧美| 国产精品xxx在线观看| 麻豆亚洲精品| 日本а中文在线天堂| 免费久久精品| 色88888久久久久久影院| 精品视频在线你懂得| 日韩国产欧美一区二区三区| 日本在线不卡视频| 日韩激情一二三区| 国产亚洲欧美日韩精品一区二区三区 | 亚洲精品自拍| 日韩精品免费观看视频| 欧美亚洲色图校园春色| 日韩亚洲精品在线观看| 国产精品视频一区二区三区 | 久久av影视| 深夜日韩欧美| 自拍自偷一区二区三区| 99视频精品全国免费| 99热精品在线| 欧美精品影院| 精品欧美视频| 综合一区在线| а√天堂8资源中文在线| 日韩福利视频一区| 中文字幕一区二区精品区| 丝袜av一区| 麻豆久久一区二区| 精品免费视频| av高清不卡| 久久要要av| 亚洲免费黄色| 日韩福利视频网| 国产一区二区三区四区大秀| 精精国产xxxx视频在线播放 | 国产精品一区二区av日韩在线| 麻豆久久久久久| 蜜桃av在线播放| 在线视频免费在线观看一区二区| 午夜电影一区| 日韩国产在线不卡视频| 精品美女视频| 亚洲精品中文字幕乱码| 日本不卡高清视频| 成人台湾亚洲精品一区二区| 久久精品国产99久久| 亚洲一级淫片| 国产在线观看91一区二区三区 | 免费看av不卡| 国产亚洲午夜| 国产精品igao视频网网址不卡日韩 | 精品久久中文| 欧美成人精品| 奇米狠狠一区二区三区| 日韩在线精品| 亚洲精品三级| 国产美女高潮在线| 蜜臀久久久99精品久久久久久| 国产精品欧美一区二区三区不卡 | 欧美91精品| 欧美久久精品| 波多野结衣一区| 久久不卡国产精品一区二区| 成人小电影网站| 伊人久久大香伊蕉在人线观看热v| 麻豆精品少妇| 六月丁香综合| 精品精品99| 日本欧美在线看| 国模精品一区| 偷拍亚洲精品| 久久亚洲专区| 久久影院资源站| 丝袜美腿一区二区三区| 精品欠久久久中文字幕加勒比| 免费看日韩精品| 久久精品亚洲欧美日韩精品中文字幕| 日韩国产欧美视频| 久久精品国产99久久|