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

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

MyBatis 史詩級裹腳布可以燒了

0
分享至

作為一名 Java 開發(fā)者,你一定經(jīng)歷過被 MyBatis XML 支配的恐懼。

當(dāng)你打開一個(gè) UserMapper.xml,迎面而來的是幾百行甚至上千行的 , , , 標(biāo)簽。原本清爽的 SQL 語句被這些 XML 標(biāo)簽切割得支離破碎,仿佛老太太的裹腳布——又臭又長。

如果你也受夠了在 XML 標(biāo)簽里寫邏輯,受夠了為了一個(gè)簡單的非空判斷就要寫三行 XML,那么請繼續(xù)往下看。dbVisitor 的動態(tài) SQL 規(guī)則機(jī)制,也許就是你一直在尋找的 "剪刀"。

MyBatis 的 XML 地獄

讓我們先回顧一下,一個(gè)標(biāo)準(zhǔn)的、帶有幾個(gè)查詢條件的 MyBatis SQL 是什么樣子的:

這段代碼的問題在哪里,已經(jīng)不用多言!這種 一坨一坨 的開發(fā)體驗(yàn)看到就難受至極,更別提還要去維護(hù)它。

革命性的解法

dbVisitor 作為一個(gè)新一代的數(shù)據(jù)庫訪問工具,最核心的設(shè)計(jì)理念之一就是:讓 SQL 回歸 SQL

利用 dbVisitor 獨(dú)創(chuàng)的 規(guī)則機(jī)制,上面的 XML 代碼可以精簡為:

   @{and, create_time >= :createTime}

假設(shè)只傳入?yún)?shù) name="Tom",生成的 SQL 如下:

SELECT * FROM tb_user WHERE name = ?

是不是瞬間清爽了?沒有了尖括號的視覺干擾,沒有了冗余的 XML 閉合標(biāo)簽,只有純粹的 SQL 邏輯。

你可能會問:@{and, ...} 到底做了什么?它是簡單的字符串拼接嗎?

當(dāng)然不是!dbVisitor 的規(guī)則是非常智能的,以 @{and, name = :name} 為例,它內(nèi)置了以下邏輯:

智能判空

引擎會自動檢查 key = :key 表達(dá)式中的參數(shù)。如果參數(shù) :key 為 null,整個(gè) @{and} 規(guī)則塊會被自動忽略,不會生成任何 SQL。

(注意:空字符串""被視為有效值,不會忽略)

WHERE 處理

如果內(nèi)容不為空 @{and} 會識別它是否是 WHERE 子句的開頭。如果是開頭(例如前面沒有1=1),它會自動抹去 AND,直接生成 WHERE name = ?

(這一點(diǎn)類似 MyBatis 的標(biāo)簽,但更加隱形)

這一切都是自動發(fā)生的,你只需要聲明規(guī)則,剩下的交給 dbVisitor。

條件判斷本該如此性感

MyBatis 中 90% 的 標(biāo)簽都是為了做兩件事:

  • 參數(shù)不為空時(shí),追加查詢條件。

  • 開關(guān)開啟時(shí),追加查詢條件。

dbVisitor 將這兩類高頻場景直接內(nèi)化為最基礎(chǔ)的規(guī)則,無需任何復(fù)雜的標(biāo)簽嵌套。

智能補(bǔ)全

自動檢查條件狀態(tài)選擇是否需要自動補(bǔ)全 WHERE/AND/OR 關(guān)鍵字。

    @{and, name = :name} -- 生成 and name = ?

2. 智能判空

@{and} 和 @{or} 這是最常用的判空規(guī)則,它們會自動檢查參數(shù)是否為 null。

  @{or,  age > :age}   -- 僅當(dāng) age 不為空時(shí)生成  or  age > ?

3. 開關(guān)控制

@{ifand} 和 @{ifor} 當(dāng)你需要用布爾值來控制 SQL 時(shí)就會使用他們。

SELECT * FROM tb_user @{ifand, !showAll, is_delete = 0}

對比 MyBatis 的臃腫寫法以及像老鼠屎一樣無處不在的 1=1

僅僅是一個(gè)簡單的條件,dbVisitor 讓你少寫了 3 行代碼,減少無用的條件判斷,這就是效率。

一行代碼的 IN 查詢

MyBatis 的 標(biāo)簽簡直是反人類設(shè)計(jì):collection, item, open, close... 配置項(xiàng)多達(dá)七八個(gè),而且為了防止集合為空導(dǎo)致 SQL 語法錯誤,通常還得在外面套一層,簡直令人窒息:

if>

而在 dbVisitor 中,利用 @{ifand} 和 @{in} 兩個(gè)規(guī)則的 嵌套使用,你只需要一行:

  @{ifand, !idList.isEmpty, id IN @{in, :idList}}

對比一下,這代碼量節(jié)省的可不是一點(diǎn)點(diǎn),而是 降維打擊

忘掉 , 忘掉逗號

在寫 Update 語句時(shí),處理末尾的逗號是最煩人的。dbVisitor 的 @{set}規(guī)則完美解決,引擎會自動處理字段間的逗號:

WHERE id = #{id}

MyBatis 用了一大堆標(biāo)簽來解決這個(gè)問題:

WHERE id = #{id}

?? 雖然 @{set} 規(guī)則很強(qiáng)大,但規(guī)則的判斷是依賴已經(jīng)生成的 SQL 進(jìn)行推斷。

當(dāng)規(guī)則沒有匹配時(shí),一些意外情況:

WHERE id = :id

分支判斷的救星

MyBatis 的 - - 結(jié)構(gòu)冗長得令人發(fā)指,寫起來仿佛在填表。最大的麻煩在于即便是使用 @Select 注解仍然逃脫不了 XML 的魔咒。

                      @Param("content") String content);

dbVisitor 讓你用 SQL 的思維寫 SQL,更符合編程直覺。同樣的場景,dbVisitor 只需要這樣:

CASE 規(guī)則 IF-ELSE 模式

}

CASE 規(guī)則 Switch 模式 換一個(gè)例子:根據(jù) encryptMode 的值選擇加密方式。

}

像樂高積木一樣組合

規(guī)則引擎最強(qiáng)大的地方在于其 可組合性。規(guī)則可以像樂高積木一樣嵌套使用。這意味著你可以用 @{case} 的結(jié)果去驅(qū)動 @{and} 或者在 @{else} 里寫一組 @{if}

比如一個(gè)常見的權(quán)限控制場景:

  • 如果是管理員 (ADMIN),查詢所有數(shù)據(jù);

  • 如果是部門經(jīng)理 (MGR),查詢本部門數(shù)據(jù);

  • 如果是普通員工,只能查自己的數(shù)據(jù)。


}

注意看,外層的 @{and} 會自動處理連接詞:

  • 當(dāng) role 是 'ADMIN' 時(shí),@{case} 輸出空,整個(gè) @{and} 消失。

  • 當(dāng) role 是 'MGR' 時(shí),內(nèi)部輸出 dept_id = ?,外層自動加上 AND。

這種自然的嵌套組合,讓你能用 SQL 結(jié)構(gòu)直接表達(dá)復(fù)雜的業(yè)務(wù)邏輯,而不是在 Java 代碼和 XML 之間反復(fù)橫跳。

這就結(jié)束了?

規(guī)則的強(qiáng)大之處在于無處不在。你不需要為了使用動態(tài) SQL 而強(qiáng)迫自己切換開發(fā)模式。無論你身處哪個(gè)層級,dbVisitor 的動態(tài)規(guī)則都能無縫集成。

1. 在 編程式 API (JdbcTemplate) 中使用

不需要 StringBuilder,不需要拼接字符串。

    "SELECT * FROM users @{and, name = :name}", args);

2. 在 聲明式 API (注解) 中使用

徹底擺脫 @Script 或者

特別聲明:以上內(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)推薦
證監(jiān)會重磅!緊急召開座談會,利好三大板塊!下周A股將加速上漲

證監(jiān)會重磅!緊急召開座談會,利好三大板塊!下周A股將加速上漲

虎哥閑聊
2026-02-28 08:39:33
56歲女主持人因患癌癥去世!昏迷3天,家人含淚拔管送最后一程

56歲女主持人因患癌癥去世!昏迷3天,家人含淚拔管送最后一程

代軍哥哥談娛樂
2026-02-27 10:49:34
CCTV5直播!中國男籃對陣中國臺北,CBA后衛(wèi)巔峰對決,劍指連勝

CCTV5直播!中國男籃對陣中國臺北,CBA后衛(wèi)巔峰對決,劍指連勝

中國籃壇快訊
2026-02-27 14:10:03
全球足球俱樂部年度吸金王:一年收入近百億,已連續(xù)25個(gè)季度盈利

全球足球俱樂部年度吸金王:一年收入近百億,已連續(xù)25個(gè)季度盈利

柳先說
2026-02-27 22:02:28
四川成都一交警在馬路中央被非機(jī)動車撞飛,頭部流血送醫(yī);警方回應(yīng):被撞交警正在醫(yī)院治療,事故原因正在調(diào)查中

四川成都一交警在馬路中央被非機(jī)動車撞飛,頭部流血送醫(yī);警方回應(yīng):被撞交警正在醫(yī)院治療,事故原因正在調(diào)查中

揚(yáng)子晚報(bào)
2026-02-27 15:37:20
情侶虎跳峽游玩時(shí)男子墜江失蹤!女友崩潰:我們馬上要結(jié)婚…已是五天內(nèi)第二起事故

情侶虎跳峽游玩時(shí)男子墜江失蹤!女友崩潰:我們馬上要結(jié)婚…已是五天內(nèi)第二起事故

新民晚報(bào)
2026-02-27 19:50:14
為什么東風(fēng)-41洲際導(dǎo)彈,拒絕使用“北斗”衛(wèi)星導(dǎo)航制導(dǎo)?

為什么東風(fēng)-41洲際導(dǎo)彈,拒絕使用“北斗”衛(wèi)星導(dǎo)航制導(dǎo)?

Ck的蜜糖
2026-02-28 01:00:58
中朝邊境鴨綠江口現(xiàn)狀:朝鮮領(lǐng)土正在不斷增加,中方卻在逐漸減少

中朝邊境鴨綠江口現(xiàn)狀:朝鮮領(lǐng)土正在不斷增加,中方卻在逐漸減少

普覽
2026-02-26 21:29:19
吉利偷偷換上了朱雀新車標(biāo),被18個(gè)國家搶購,帥得有點(diǎn)太過分

吉利偷偷換上了朱雀新車標(biāo),被18個(gè)國家搶購,帥得有點(diǎn)太過分

有態(tài)度網(wǎng)友17y
2026-02-26 19:58:08
回顧“91女神”琪琪:五官出眾,卻因天真讓自己“受傷”

回顧“91女神”琪琪:五官出眾,卻因天真讓自己“受傷”

就一點(diǎn)
2025-11-22 10:36:39
巴拿馬總統(tǒng)徹底傻眼!發(fā)現(xiàn)強(qiáng)吞中國18億資產(chǎn),竟是自掘墳?zāi)?>
    </a>
        <h3>
      <a href=妙知
2026-02-28 11:29:13
又來?!皮特朱莉24歲兒子放棄皮特姓氏!已經(jīng)第四個(gè)了啊...

又來?!皮特朱莉24歲兒子放棄皮特姓氏!已經(jīng)第四個(gè)了啊...

英國那些事兒
2026-02-27 23:25:01
王晶沒撒謊!退出春晚、和沈騰決裂,性格大變的賈玲印證他說的話

王晶沒撒謊!退出春晚、和沈騰決裂,性格大變的賈玲印證他說的話

胡一舸南游y
2026-01-25 14:54:04
73歲李修賢:老到認(rèn)不出,住3層豪華別墅,帶3個(gè)混血外孫當(dāng)網(wǎng)紅

73歲李修賢:老到認(rèn)不出,住3層豪華別墅,帶3個(gè)混血外孫當(dāng)網(wǎng)紅

以茶帶書
2026-02-27 19:15:16
知名好萊塢演員在自家谷倉內(nèi)身亡:汽車搭電時(shí)突然自燃,曾獲5屆拳擊冠軍

知名好萊塢演員在自家谷倉內(nèi)身亡:汽車搭電時(shí)突然自燃,曾獲5屆拳擊冠軍

紅星新聞
2026-02-27 17:33:09
就是一整塊屏!廣東新聞聯(lián)播提前展示OPPO Find N6:微距展示肉眼幾乎看不到折痕

就是一整塊屏!廣東新聞聯(lián)播提前展示OPPO Find N6:微距展示肉眼幾乎看不到折痕

快科技
2026-02-27 10:42:00
柬埔寨國王太后赴華體檢 汪文斌大使送行

柬埔寨國王太后赴華體檢 汪文斌大使送行

看看新聞Knews
2026-02-27 16:04:02
張藝謀:第一次見她,我對她說,你等著我們來找你,不要亂演電影

張藝謀:第一次見她,我對她說,你等著我們來找你,不要亂演電影

秀語千尋
2026-02-22 19:28:42
賺大了!網(wǎng)友網(wǎng)購一條32GB DDR5內(nèi)存 打開包裹目瞪口呆:竟收到十條

賺大了!網(wǎng)友網(wǎng)購一條32GB DDR5內(nèi)存 打開包裹目瞪口呆:竟收到十條

快科技
2026-02-27 09:37:04
騎士主帥:哈登在訓(xùn)練中表現(xiàn)得有些吃力,教練組決定讓他繼續(xù)休息

騎士主帥:哈登在訓(xùn)練中表現(xiàn)得有些吃力,教練組決定讓他繼續(xù)休息

移動擋拆
2026-02-28 08:32:33
2026-02-28 12:35:00
開源中國 incentive-icons
開源中國
每天為開發(fā)者推送最新技術(shù)資訊
7602文章數(shù) 34502關(guān)注度
往期回顧 全部

科技要聞

狂攬1100億美元!OpenAI再創(chuàng)融資神話

頭條要聞

牛彈琴:伊朗面臨生死存亡關(guān)鍵時(shí)刻 信號已經(jīng)很明顯了

頭條要聞

牛彈琴:伊朗面臨生死存亡關(guān)鍵時(shí)刻 信號已經(jīng)很明顯了

體育要聞

球隊(duì)主力全報(bào)銷?頂風(fēng)擺爛演都不演了

娛樂要聞

疑似王一博被爆私密聊天記錄

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

沈明高提共富建議 百姓持科技股國家兜底

汽車要聞

嵐圖泰山黑武士版3月上市 搭載華為四激光智駕方案

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

房產(chǎn)
親子
手機(jī)
藝術(shù)
公開課

房產(chǎn)要聞

重磅!海南“十五五”規(guī)劃出爐!未來五年,方向定了!

親子要聞

生孩子如同走一趟“鬼門關(guān)”?產(chǎn)床旁的一面墻,揭開生育的遮羞布

手機(jī)要聞

谷歌Pixel 11跑分遭曝 Tensor G6性能又拉了

藝術(shù)要聞

這幅草書中19個(gè)字,您能一眼看懂嗎?“徐娘半老”含義引熱議!

公開課

李玫瑾:為什么性格比能力更重要?

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