国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

新入職的干練小伙,把 MyBatis 替換成 MyBatis-Plus,被領(lǐng)導(dǎo)怒懟了...

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時刷題!

正文

一個老項(xiàng)目,數(shù)據(jù)庫用的是 MySQL5.7.36, ORM 框架用的 MyBatis3.5.0, mysql-connector-java 版本是5.1.26

新來了一個干練的小伙,精力充沛,看著就是一個喜歡折騰的主


他就覺得 MyBatis 使用起來不夠簡單,要寫的代碼還比較多,覺得有必要替換成 MyBatis-Plus

Mybatis-Plus替換Mybatis

先準(zhǔn)備一張表 tbl_order ,然后初始化 2 條數(shù)據(jù)


為了簡化演示,我就直接用 Mybatis-Plus 搭建一個示例 demo ,以此來模擬下 "小伙" 替換的過程

只是用 MyBatis-Plus 替換 MyBatis ,其他組件的版本暫不動

Mybatis-Plus 版本就用 "小伙" 引用的版本:3.1.1, mysql-connector-java 版本保持不變還是5.1.26

示例代碼:play_it_safe

此時運(yùn)行 com.qsl.OrderTest#orderListAllTest ,會報(bào)錯,異常信息如下

注意看 Caused by


不支持的轉(zhuǎn)換類型: java.time.LocalDateTime

誰不支持? mysql-connector-java 不支持!

那 mysql-connector-java 哪個版本支持了,答案是: 5.1.37


升級mysql-connector-java

將 mysql-connector-java 升級到 5.1.37 ,再執(zhí)行下 com.qsl.OrderTest#orderListAllTest


不再報(bào)異常,查詢結(jié)果也正確

MyBatis-Plus 替換 Mybatis 似乎就完成了

順的讓人有點(diǎn)懷疑


Conversion not supported for type java.time.LocalDateTime

我們再回過頭去看看前面說到的異常: Conversion not supported for type java.time.LocalDateTime

Mybatis-Plus 替換 MyBatis 之前沒這個異常,替換之后就有了這個異常,這不是 Mybatis-Plus 的問題?

如何找這個異常的根因了?

很簡單,直接從異常堆棧入手


點(diǎn)了之后,你會發(fā)現(xiàn)方法很簡單


這么簡單的代碼能有什么問題?

大家注意看圖中左上角 MyBatis 的版本,是3.5.1,并不是最初的 3.5.0

有小伙伴可能會問了:不是用 MyBatis-Plus 替換了 MyBatis 嗎,怎么還有 Mybatis ?

這個問題問的真的好,我只想給你個大嘴巴子


你看下 MyBatis-Plus 的官方說明


既然基于 Mybatis 3.5.0 沒有拋異常,而基于 3.5.1 拋了異常, LocalDateTimeTypeHandler 在 3.5.1 肯定做了調(diào)整

我們來看下調(diào)整了什么?


看出什么了?

MyBatis 3.5.0 會處理 LocalDateTime 類型的轉(zhuǎn)換(將 java.sql.Timestamp 轉(zhuǎn)換成 java.time.LocalDateTime )

然而,注意了,然而來了!!!

然而從 MyBatis 3.5.1 開始,不再處理 LocalDateTime (還包括: LocalDate 、 LocalTime )類型的轉(zhuǎn)換

而是交由 JDBC 組件,也就是 mysql-connector-java 來實(shí)現(xiàn)

而巧的是, mysql-connector-java 5.1.26 不支持類型 LocalDateTime


那它支持哪些類型了?

我們同樣從異常堆棧入手


點(diǎn)了之后,可以看到下圖


往上滑動鼠標(biāo),就可以看到支持的類型了

確實(shí)沒有 LocalDateTime 、 LocalDate 和 LocalTime

mysql-connector-java 5.1.37 開始支持 LocalDateTime 、 LocalDate 和 LocalTime ,前面已經(jīng)介紹過了,不再過多贅述

總結(jié)下異常根因: MyBatis 3.5.1 開始不再處理 LocalDateTime 、 LocalDate 和 LocalTime 的轉(zhuǎn)換,而 mysql-connector-java 5.1.37 之前都不支持這些類型

弄清楚這個異常的來龍去脈之后,順的是不是又理所當(dāng)然一些了?

暴風(fēng)雨的來臨

版本上線沒 2 天,該來的終究還是來了

我們往表 tbl_order 中插入一條記錄: INSERT INTOtbl_orderVALUES (3, 'asdfgh', NULL, '2024-02-21 20:01:31.111', '2024-02-21 20:02:56.764');

再執(zhí)行 com.qsl.OrderTest#orderListAllTest


此刻我就想問 "小伙" :刺不刺激?


碰到了異常,那就找原因

同樣從異常堆棧入手


看出什么了?

如果 getTimestamp(columnIndex) 得到的是 NULL ,不就 NullPointerException ? 嚴(yán)謹(jǐn)性了?

修復(fù)問題要緊,我們先看哪個版本進(jìn)行修復(fù)了?


將 mysql-connector-java 升級到 5.1.42


問題得以修復(fù)

經(jīng)此一役, "小伙" 似乎成長了很多,但眼里的光卻暗淡了不少

mybatis-plus-issues-1114

無意中看到了這個issue-1114,跟我們前面分析的 Conversion not supported for type java.time.LocalDateTime 是不是同一個問題?

只是我們用到的數(shù)據(jù)庫連接池是默認(rèn)的 HikariCP 而非 Druid

結(jié)合druid/issues/3302來看,如果使用 Druid 作為數(shù)據(jù)庫連接池,出現(xiàn)的異常可能跟我們前面分析的確實(shí)不一樣

所以大家需要根據(jù)自己的實(shí)際情況來分析,但針對異常的分析方法是通用的

修了“不該修的Bug”

這是我親身經(jīng)歷的一次事故,到現(xiàn)在都覺得這鍋背的有點(diǎn)冤

背景介紹

文件分為主文件和附屬文件,主文件生成之后再生成附屬文件

附屬文件生成的時候,會校驗(yàn)其依賴的主文件是否都生成了,如果有任意一個主文件未生成,依賴文件不能生成并拋出異常

這個業(yè)務(wù)還是比較簡單吧

但在附屬文件校驗(yàn)的優(yōu)化上,我背上了生產(chǎn)事故

優(yōu)化前的校驗(yàn)


listFileGenerateLog 作用是根據(jù)參數(shù)查詢文件生成記錄,具體實(shí)現(xiàn)不用關(guān)注

這個校驗(yàn)邏輯是什么?只要有任意一個主文件生成,校驗(yàn)就算通過了,與業(yè)務(wù)要求(主文件全部生成,才算校驗(yàn)通過)不匹配呀

這不是妥妥的 Bug ?


優(yōu)化后的校驗(yàn)

碰到 Bug 你能忍?我是忍不了一點(diǎn),反手就是一個優(yōu)化


這是不是就符合業(yè)務(wù)要求了?

生產(chǎn)異常

中午升級之后,穩(wěn)定運(yùn)行了一段時間,期間文件正常生成,沒出現(xiàn)任何問題

晚上 19 點(diǎn),有個附屬文件生成失敗,異常提示: 依賴的資源[abc_{yyyyMMdd}.txt]未生成

當(dāng)時看到這個異常的第一眼,覺得既熟悉又陌生,熟悉的是這個異常信息的結(jié)構(gòu),陌生的是 abc_{yyyyMMdd}.txt ,這不是文件名嗎?

正常來講應(yīng)該是 fileId ,是一個自增的正整數(shù)呀,怎么會是文件名了?

腦中瞬間閃過一個念頭:數(shù)據(jù)庫數(shù)據(jù)有問題?

一查嚇一跳,這個附屬文件關(guān)聯(lián)主文件的字段值是: 4356,abc_{yyyyMMdd}.txt ,看最終修改時間是: 2021-08-21 15:22:12.652

4356 文件的文件名就是 abc_{yyyyMMdd}.txt ,正常來講,這個關(guān)聯(lián)字段的值應(yīng)該是: 4356

敢情這個 校驗(yàn)Bug 完美的兼容了這個臟數(shù)據(jù) ,所以幾年了,一直沒出現(xiàn)異常


是不是有這味了?

這可倒好,我把 Bug 修好,還出現(xiàn)問題了,你說我是不是手賤?

經(jīng)此一役,我眼里的光又暗淡了些許

總結(jié)

關(guān)于對組件的升級,或者對舊代碼的調(diào)整,都有可能牽一發(fā)動全身,影響甚大

我的觀點(diǎn)是:能不動就不要動,改好沒績效,改出問題要背鍋,吃力不討好,又不是不能跑

如果到了不得不改的地步了,那就需要全面的測試。

來自:https://www.cnblogs.com/youzhibing/p/18019399

公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!

最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復(fù)“加群”,即可入群!

文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
美國吃華人絕戶財(cái)富已經(jīng)成為一個公開的密碼了!

美國吃華人絕戶財(cái)富已經(jīng)成為一個公開的密碼了!

達(dá)文西看世界
2026-01-24 15:32:33
中國金花距離澳網(wǎng)決賽一步之遙,女單冠軍爭奪戰(zhàn)逐漸明朗

中國金花距離澳網(wǎng)決賽一步之遙,女單冠軍爭奪戰(zhàn)逐漸明朗

體育豐蘊(yùn)
2026-01-29 16:08:58
國產(chǎn)固態(tài)電池量產(chǎn)加速!數(shù)千萬新能源車主,恐成最大“接盤俠”?

國產(chǎn)固態(tài)電池量產(chǎn)加速!數(shù)千萬新能源車主,恐成最大“接盤俠”?

胖福的小木屋
2026-01-28 10:43:40
剖人心者終被食:亂世惡棍張彥澤的結(jié)局比電視上還慘

剖人心者終被食:亂世惡棍張彥澤的結(jié)局比電視上還慘

愛歷史
2026-01-28 10:07:37
價(jià)格大跳水!主力車型直降超15萬,中年男人的夢中豪車撐不住了?

價(jià)格大跳水!主力車型直降超15萬,中年男人的夢中豪車撐不住了?

財(cái)經(jīng)八卦
2026-01-28 20:05:03
女子用剁椒魚頭試探“網(wǎng)戀男友”,仍被騙68萬

女子用剁椒魚頭試探“網(wǎng)戀男友”,仍被騙68萬

中國日報(bào)
2026-01-29 12:00:59
編程門檻被壓到799美元?“那個拿著Mac Mini+Claude的「門外漢」,搶走了程序員3個月的活!”

編程門檻被壓到799美元?“那個拿著Mac Mini+Claude的「門外漢」,搶走了程序員3個月的活!”

CSDN
2026-01-27 18:10:04
阿富汗塔利班恢復(fù)奴隸制?

阿富汗塔利班恢復(fù)奴隸制?

孫曉宇
2026-01-28 14:18:17
貝森特再點(diǎn)卡尼:你這種人我見得多了,別搞事

貝森特再點(diǎn)卡尼:你這種人我見得多了,別搞事

觀察者網(wǎng)
2026-01-29 08:51:38
周總理逝世21年后,中國銀行核查賬目時發(fā)現(xiàn)他名下存有巨額存款,一番調(diào)查后揭開了背后的真相

周總理逝世21年后,中國銀行核查賬目時發(fā)現(xiàn)他名下存有巨額存款,一番調(diào)查后揭開了背后的真相

寄史言志
2026-01-17 16:37:15
無法復(fù)制的價(jià)值!95年喬丹第一次復(fù)出有多轟動?魔術(shù)師曾為他下跪

無法復(fù)制的價(jià)值!95年喬丹第一次復(fù)出有多轟動?魔術(shù)師曾為他下跪

禾三千體育
2026-01-29 16:42:32
要打就打痛!中國手段已升級,日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

要打就打痛!中國手段已升級,日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

墨蘭史書
2026-01-28 20:45:03
偉大的2-0!中國金花直通澳網(wǎng)決賽:解鎖2大成就,爭冠對手確定!

偉大的2-0!中國金花直通澳網(wǎng)決賽:解鎖2大成就,爭冠對手確定!

劉姚堯的文字城堡
2026-01-29 16:33:24
本期禁足名單分布:31名球員、6名教練、17名足協(xié)官員、1名裁判

本期禁足名單分布:31名球員、6名教練、17名足協(xié)官員、1名裁判

慢歌輕步謠
2026-01-29 14:03:07
陳永貴夫人宋玉林離世,葬禮之上郭鳳蓮致悼詞,現(xiàn)場人山人海滿是悲戚

陳永貴夫人宋玉林離世,葬禮之上郭鳳蓮致悼詞,現(xiàn)場人山人海滿是悲戚

文史明鑒
2026-01-22 17:37:12
金價(jià)創(chuàng)新高!黃金變現(xiàn)業(yè)務(wù)爆了

金價(jià)創(chuàng)新高!黃金變現(xiàn)業(yè)務(wù)爆了

環(huán)球網(wǎng)資訊
2026-01-29 11:28:09
能否逆轉(zhuǎn)銷量?曝特斯拉即將推出Model YL+,88度電池,續(xù)航800km

能否逆轉(zhuǎn)銷量?曝特斯拉即將推出Model YL+,88度電池,續(xù)航800km

凡兮說
2026-01-29 16:44:36
大S雕像揭幕儀式即將開啟,出席人員曝光!汪小菲有望上金寶山!

大S雕像揭幕儀式即將開啟,出席人員曝光!汪小菲有望上金寶山!

娛樂團(tuán)長
2026-01-29 12:26:42
再打下去,烏克蘭沒男人了!澤連斯基解禁,允許年輕男性出國避難

再打下去,烏克蘭沒男人了!澤連斯基解禁,允許年輕男性出國避難

史智文道
2026-01-29 16:22:57
阿森納全勝領(lǐng)銜 英超隊(duì)踢歐冠怎么就如此輕松?

阿森納全勝領(lǐng)銜 英超隊(duì)踢歐冠怎么就如此輕松?

體壇周報(bào)
2026-01-29 16:16:23
2026-01-29 17:23:00
Java精選
Java精選
一場永遠(yuǎn)也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂要聞

張譯不再隱瞞!公開回應(yīng)退圈息影真相

財(cái)經(jīng)要聞

崔東樹:中國汽車未來年銷或達(dá)5000萬輛

汽車要聞

車長超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

房產(chǎn)
健康
教育
藝術(shù)
軍事航空

房產(chǎn)要聞

萬科難眠夜:前董事長郁亮失聯(lián),三筆債券靠深鐵才通過展期

耳石癥分類型,癥狀大不同

教育要聞

“國家課程落地吳江行動叢書”發(fā)布!聚焦課改前沿,共探育人新路!

藝術(shù)要聞

梵高全集(高清350張)震撼……

軍事要聞

中國代表:支持伊朗國家穩(wěn)定 武力解決不了問題

無障礙瀏覽 進(jìn)入關(guān)懷版