1. Mybatis獲取引數值的兩種方式
MyBatis獲取引數值的兩種方式:#{}和${}
-
{}:本質就是占位符賦值
- ${}:本質就是字串拼接
2. 單個字面量型別的引數
什么是字面量??
int a = 1;
比如說上面這行代碼,里面的1,我們看到的是1,它實際的值也是1,這就是字面量;再比如里面的a,我們看到的是a,但它的值并不是a而是1,這叫變數,
根據用戶名root查找用戶資訊

-
{} 占位符賦值


通過日志資訊可以看到sql陳述句中
#{}被占位符?代替,注意:映射檔案中 #{username}的引數可以寫成任意的
select * from t_user where username = #{username} # 可以寫成 select * from t_user where username = #{name} select * from t_user where username = #{abc} select * from t_user where username = #{helloworld}因為mybatis執行映射檔案的底層代碼中也不知道你的引數名叫username,只是一一對應,但是建議寫成username,
-
${} 字串拼接
如果直接將# 改為 $ ,執行會報錯,我們分析一下錯誤原因
select * from t_user where username = ${username}
可以看到這里root直接拼接到sql中,我們知道sql陳述句的字串型別是要加單引號的,而這里沒有,就把root當成了一個變數,下面報錯資訊說的就是找不到這么root,
正確做法:加個單引號
select * from t_user where username = '${username}'同樣的
${username}的引數可以寫成任意的,除了數字之外
3. 多個字面量型別的引數
根據用戶名和密碼進行驗證登錄:
直接上 #{}的結論:
-
使用arg0、arg1或param1、param2:
select * from t_user where username = #{arg0} and password = #{arg1} # 也可以寫成 select * from t_user where username = #{param1} and password = #{param2}若mapper介面中的方法引數為多個時,此時MyBatis會自動將這些引數放在一個map集合中,以兩種方式存盤資料:
- 以arg0,arg1...為鍵,以引數為值
- 以param1,param2...為鍵,以引數為值;
你甚至可以混合使用兩種方式,自己注意別弄混就行
因此只需要通過 ${} 和 #{} 訪問map集合的鍵就可以獲取相對應的值,注意 ${} 需要手動加單引號
當然我們也可以自定義鍵名,具體方法看后面講的使用@Param標識引數
4. map集合型別的引數
若mapper介面中的方法需要的引數為多個時,此時可以手動創建map集合,將這些資料放在
map中
只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號

5. 物體型別別的引數
若mapper介面中的方法引數為物體類物件時
此時可以使用${}和#{},通過訪問物體類物件中的屬性名獲取屬性值,注意${}需要手動加單引號
手動創建一個User物件:

6. 使用@Param標識引數
使用最廣泛的
可以通過@Param注解標識mapper介面中的方法引數 ,這樣就可以自定義map集合中的鍵名,而不是只能用前面講的arg0、arg1和param1、param2

總結
- 建議除了5中物體型別別的引數,其他的我們都加上@Param注解,即使用@Param標識引數
- 部分內容來自 B站尚硅谷課程 ,老師講得很好,有興趣的可以聽聽,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502290.html
標籤:Java
上一篇:Restful風格
下一篇:Java 中的執行緒池
