MyBatis中的兩種參數(shù)傳遞類型詳解(示例代碼)
以下是 MyBatis 中傳遞多個(gè)參數(shù)的兩種主要方式:
? 方式一:使用Map<String, Object>
List<User> search(Map<String, Object> params);
- 優(yōu)點(diǎn):靈活,適合動態(tài)、不固定的參數(shù)(如高級搜索)。
- 缺點(diǎn):無編譯期檢查,key 容易拼錯(cuò),可讀性差,難維護(hù)。
- 適用:參數(shù)多變、臨時(shí)性場景。
- 使用場景:
場景一:動態(tài)查詢條件較多且不固定
當(dāng)你需要構(gòu)建一個(gè)“高級搜索”功能,用戶可以任意組合多個(gè)篩選條件(比如按姓名、年齡范圍、城市、狀態(tài)等),而且這些條件不是固定的(可能今天加一個(gè)字段,明天去掉另一個(gè)),這時(shí)候用 POJO 反而顯得笨重。
場景二:批量操作需要傳遞多個(gè)不同類型的參數(shù)
例如,你想根據(jù)一組 ID 刪除記錄,同時(shí)記錄操作人和操作時(shí)間:
場景三:調(diào)用存儲過程或復(fù)雜 SQL,參數(shù)結(jié)構(gòu)不規(guī)則
有些老系統(tǒng)或 DBA 寫的存儲過程,入?yún)⒖赡苁菐资畟€(gè)零散字段,且沒有對應(yīng)的業(yè)務(wù)對象。此時(shí)用 Map 傳參更方便。
? 方式二:使用@Param注解(或封裝 POJO)(推薦)
// 多個(gè)參數(shù)用 @Param
List<User> search(@Param("name") String name, @Param("age") Integer age);
// 或封裝成 POJO(推薦結(jié)構(gòu)穩(wěn)定時(shí)用)
List<User> search(UserQuery query);- 優(yōu)點(diǎn):類型安全、IDE 支持、可讀性強(qiáng)、易于校驗(yàn)(如
@Valid)。 - 缺點(diǎn):參數(shù)多時(shí)方法簽名冗長(若不用 POJO);POJO 需額外定義。
- 適用:參數(shù)固定、語義清晰、長期維護(hù)的業(yè)務(wù)邏輯。
- **使用場景:**除了上面使用Map的情況,大部分使用
?? 一句話總結(jié):
動態(tài)/臨時(shí)用 Map,固定/正式用 @Param 或 POJO。
能用對象就別用 Map —— 代碼是給人看的。
在 MyBatis 中,Mapper 接口的方法參數(shù)通常有以下幾種方式:
- 單個(gè)基本類型(如
int,String) - Java Bean(POJO)
@Param注解標(biāo)注多個(gè)參數(shù)Map<String, Object>
而 使用 Map 作為參數(shù),通常適用于以下幾種典型場景:
Map 是“靈活性”的工具,但犧牲了“可讀性”和“安全性”。只在真正需要?jiǎng)討B(tài)、多變參數(shù)時(shí)才用它。
到此這篇關(guān)于MyBatis中的兩種參數(shù)傳遞類型的文章就介紹到這了,更多相關(guān)mybatis參數(shù)傳遞類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java快速實(shí)現(xiàn)短信登錄的詳細(xì)流程
短信登錄是基于短信驗(yàn)證碼的身份驗(yàn)證方式,在許多網(wǎng)站和應(yīng)用中被廣泛使用,通常被認(rèn)為比傳統(tǒng)的用戶名和密碼更安全,因?yàn)轵?yàn)證碼是一次性使用的,且只有用戶能夠接收到短信,本文給大家介紹了Java快速實(shí)現(xiàn)短信登錄的詳細(xì)流程,需要的朋友可以參考下2025-08-08
Java因項(xiàng)目配置不當(dāng)而引發(fā)的數(shù)據(jù)泄露
這篇文章主要介紹了Java因項(xiàng)目配置不當(dāng)而引發(fā)的數(shù)據(jù)泄露解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點(diǎn)之Java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點(diǎn)之Java學(xué)院整理)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java?lambda表達(dá)式與泛型整理總結(jié)
Lambda?表達(dá)式(lambda?expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。泛型編程,故如其名,是一個(gè)泛化的編程方式。其實(shí)現(xiàn)原理為程序員編寫一個(gè)函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)2022-07-07
Mybatis的特點(diǎn)及優(yōu)點(diǎn)
Mybatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis。mybatis有哪些特點(diǎn)和優(yōu)點(diǎn)呢?通過本文一起學(xué)習(xí)吧2016-12-12
Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解
這篇文章主要介紹了Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解,有些朋友可能不了解過濾器、監(jiān)聽器和攔截器的區(qū)別,本文就來詳細(xì)講一下,相信看完你會有所收獲,需要的朋友可以參考下2024-01-01
使用Thrift實(shí)現(xiàn)跨語言RPC的調(diào)用
Thrift最大的優(yōu)勢就是可以實(shí)現(xiàn)跨語言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語言是很常見的,本文就將使用java作為服務(wù)端,用python作為客戶端,實(shí)現(xiàn)不同語言之間的RPC調(diào)用,需要的可以參考下2023-10-10

