1墅茉、在MyBatis 的映射配置文件中命黔,動態(tài)傳遞參數(shù)有兩種方式:
#{}
:占位符${}
:拼接符
2、#{} 和 ${} 的區(qū)別
-
①
1)
#{}
為參數(shù)占位符 ?就斤,即sql 預編譯
2)
${}
為字符串替換悍募,即sql 拼接
-
②
1)
#{}
:動態(tài)解析 -> 預編譯 -> 執(zhí)行2)
${}
:動態(tài)解析 -> 編譯 -> 執(zhí)行
-
③
1)
#{}
的變量替換是在DBMS 中2)
${}
的變量替換是在 DBMS 外
-
④
1)變量替換后,
#{}
對應的變量自動加上
單引號 ''2)變量替換后洋机,
${}
對應的變量不會加上
單引號 ''
-
⑤
1)
#{}
防止sql 注入 -> 能2)
${}
防止sql 注入 -> 不能
3坠宴、#{} 和 ${} 的實例:假設傳入?yún)?shù)為 1
-
①開始
1)
#{}
:select * from t_user where uid=#{uid}2)
${}
:select * from t_user where uid= '${uid}'
-
②然后
1)
#{}
:select * from t_user where uid= ?2)
${}
:select * from t_user where uid= '1'
-
③最后
1)
#{}
:select * from t_user where uid= '1'2)
${}
:select * from t_user where uid= '1'
4、#{} 和 ${} 的大括號中的值
-
① 單個參數(shù)的情形
- 1)
#{}
:無MyBatis 默認值绷旗,可任意喜鼓,且與參數(shù)名無關
- 1)
2)
${}
<1> 使用 MyBatis 默認值 value副砍,即
${value}
- <2> 使用自定義參數(shù)名,前提:在映射器接口方法的參數(shù)前加注解
@Param("")
-
② 多個參數(shù)的情形
1)
#{}
<1>使用MyBatis 默認值
arg0庄岖、arg1豁翎、arg2 … 或 param1、param2顿锰、param3 …
- <2> 使用自定義參數(shù)名谨垃,前提:在映射器接口方法的參數(shù)前加注解@Param("")
2)
${}
<1> 使用MyBatis 默認值 arg0、arg1硼控、arg2 … 或 param1、param2胳赌、param3 …
- <2> 使用自定義參數(shù)名牢撼,前提:在映射器接口方法的參數(shù)前加注解@Param("")
注:@Param("")
是 @Param(value="")
的簡寫
5、#{} 和 ${} 在使用中的技巧和建議
(1)不論是單個參數(shù)疑苫,還是多個參數(shù)熏版,一律都建議使用注解@Param("")
(2)能用 #{}
的地方就用#{}
,不用或少用${}
(3)表名
作參數(shù)時捍掺,必須用 ${}
撼短。如:
select * from ${tableName}
(4)order by
時,必須用 ${}
挺勿。如:
select * from t_user order by ${columnName}
(5)使用 ${}
時曲横,要注意何時加或不加單引號,即 ${}
和 '${}'