MyBatis中的兩種參數(shù)傳遞類型詳解(示例代碼)
以下是 MyBatis 中傳遞多個參數(shù)的兩種主要方式:
? 方式一:使用Map<String, Object>
List<User> search(Map<String, Object> params);
- 優(yōu)點(diǎn):靈活,適合動態(tài)、不固定的參數(shù)(如高級搜索)。
- 缺點(diǎn):無編譯期檢查,key 容易拼錯,可讀性差,難維護(hù)。
- 適用:參數(shù)多變、臨時性場景。
- 使用場景:
場景一:動態(tài)查詢條件較多且不固定
當(dāng)你需要構(gòu)建一個“高級搜索”功能,用戶可以任意組合多個篩選條件(比如按姓名、年齡范圍、城市、狀態(tài)等),而且這些條件不是固定的(可能今天加一個字段,明天去掉另一個),這時候用 POJO 反而顯得笨重。
場景二:批量操作需要傳遞多個不同類型的參數(shù)
例如,你想根據(jù)一組 ID 刪除記錄,同時記錄操作人和操作時間:
場景三:調(diào)用存儲過程或復(fù)雜 SQL,參數(shù)結(jié)構(gòu)不規(guī)則
有些老系統(tǒng)或 DBA 寫的存儲過程,入?yún)⒖赡苁菐资畟€零散字段,且沒有對應(yīng)的業(yè)務(wù)對象。此時用 Map 傳參更方便。
? 方式二:使用@Param注解(或封裝 POJO)(推薦)
// 多個參數(shù)用 @Param
List<User> search(@Param("name") String name, @Param("age") Integer age);
// 或封裝成 POJO(推薦結(jié)構(gòu)穩(wěn)定時用)
List<User> search(UserQuery query);- 優(yōu)點(diǎn):類型安全、IDE 支持、可讀性強(qiáng)、易于校驗(yàn)(如
@Valid)。 - 缺點(diǎn):參數(shù)多時方法簽名冗長(若不用 POJO);POJO 需額外定義。
- 適用:參數(shù)固定、語義清晰、長期維護(hù)的業(yè)務(wù)邏輯。
- **使用場景:**除了上面使用Map的情況,大部分使用
?? 一句話總結(jié):
動態(tài)/臨時用 Map,固定/正式用 @Param 或 POJO。
能用對象就別用 Map —— 代碼是給人看的。
在 MyBatis 中,Mapper 接口的方法參數(shù)通常有以下幾種方式:
- 單個基本類型(如
int,String) - Java Bean(POJO)
@Param注解標(biāo)注多個參數(shù)Map<String, Object>
而 使用 Map 作為參數(shù),通常適用于以下幾種典型場景:
Map 是“靈活性”的工具,但犧牲了“可讀性”和“安全性”。只在真正需要動態(tài)、多變參數(shù)時才用它。
到此這篇關(guān)于MyBatis中的兩種參數(shù)傳遞類型的文章就介紹到這了,更多相關(guān)mybatis參數(shù)傳遞類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis打印SQL,并顯示參數(shù)的實(shí)例
這篇文章主要介紹了mybatis打印SQL,并顯示參數(shù)的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Java使用agent實(shí)現(xiàn)main方法之前的實(shí)例詳解
這篇文章主要介紹了Java使用agent實(shí)現(xiàn)main方法之前的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10
java使用軟引用實(shí)現(xiàn)緩存機(jī)制示例
這篇文章主要為大家介紹了java使用軟引用實(shí)現(xiàn)緩存機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
使用Java實(shí)現(xiàn)大小寫轉(zhuǎn)換實(shí)例代碼
最近在開發(fā)項(xiàng)目中遇到一個比較好用的方法,那就是對字符串中的字母大小進(jìn)行轉(zhuǎn)換,所以下面這篇文章主要給大家介紹了關(guān)于如何使用Java實(shí)現(xiàn)大小寫轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2022-06-06
解決springboot集成rocketmq關(guān)于tag的坑
這篇文章主要介紹了解決springboot集成rocketmq關(guān)于tag的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決
這篇文章主要介紹了idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
java ThreadLocal線程局部變量常用方法使用場景示例詳解
這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
解決IDEA錯誤 Cause: java.sql.SQLException: The server time zone
這篇文章主要介紹了解決IDEA錯誤 Cause: java.sql.SQLException: The server time zone value的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

