MyBatis中的兩種參數(shù)傳遞類型詳解(示例代碼)
以下是 MyBatis 中傳遞多個參數(shù)的兩種主要方式:
? 方式一:使用Map<String, Object>
List<User> search(Map<String, Object> params);
- 優(yōu)點:靈活,適合動態(tài)、不固定的參數(shù)(如高級搜索)。
- 缺點:無編譯期檢查,key 容易拼錯,可讀性差,難維護。
- 適用:參數(shù)多變、臨時性場景。
- 使用場景:
場景一:動態(tài)查詢條件較多且不固定
當你需要構(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)點:類型安全、IDE 支持、可讀性強、易于校驗(如
@Valid)。 - 缺點:參數(shù)多時方法簽名冗長(若不用 POJO);POJO 需額外定義。
- 適用:參數(shù)固定、語義清晰、長期維護的業(yè)務(wù)邏輯。
- **使用場景:**除了上面使用Map的情況,大部分使用
?? 一句話總結(jié):
動態(tài)/臨時用 Map,固定/正式用 @Param 或 POJO。
能用對象就別用 Map —— 代碼是給人看的。
在 MyBatis 中,Mapper 接口的方法參數(shù)通常有以下幾種方式:
- 單個基本類型(如
int,String) - Java Bean(POJO)
@Param注解標注多個參數(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)文章
Java因項目配置不當而引發(fā)的數(shù)據(jù)泄露
這篇文章主要介紹了Java因項目配置不當而引發(fā)的數(shù)據(jù)泄露解決辦法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點之Java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點之Java學(xué)院整理)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解
這篇文章主要介紹了Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解,有些朋友可能不了解過濾器、監(jiān)聽器和攔截器的區(qū)別,本文就來詳細講一下,相信看完你會有所收獲,需要的朋友可以參考下2024-01-01
使用Thrift實現(xiàn)跨語言RPC的調(diào)用
Thrift最大的優(yōu)勢就是可以實現(xiàn)跨語言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語言是很常見的,本文就將使用java作為服務(wù)端,用python作為客戶端,實現(xiàn)不同語言之間的RPC調(diào)用,需要的可以參考下2023-10-10

