1雏赦、在MyBatis 的映射配置文件中集侯,動(dòng)態(tài)傳遞參數(shù)有兩種方式:
(1)#{} 占位符
(2)${} 拼接符
2影兽、#{} 和 ${} 的區(qū)別
(1)
1)#{} 為參數(shù)占位符 ?鲫忍,即sql 預(yù)編譯
2)${} 為字符串替換刚夺,即 sql 拼接
(2)
1)#{}:動(dòng)態(tài)解析 -> 預(yù)編譯 -> 執(zhí)行
2)${}:動(dòng)態(tài)解析 -> 編譯 -> 執(zhí)行
(3)
1)#{} 的變量替換是在DBMS 中
2)${} 的變量替換是在 DBMS 外
(4)
1)變量替換后,#{} 對(duì)應(yīng)的變量自動(dòng)加上單引號(hào) ''
2)變量替換后涛贯,${} 對(duì)應(yīng)的變量不會(huì)加上單引號(hào) ''
(5)
1)#{} 能防止sql 注入
2)${} 不能防止sql 注入
3诽嘉、#{} 和 ${} 的實(shí)例:假設(shè)傳入?yún)?shù)為 1
(1)開始
1)#{}:select * from t_user where uid=#{uid}
2){uid}'
(2)然后
1)#{}:select * from t_user where uid= ?
2)${}:select * from t_user where uid= '1'
(3)最后
1)#{}:select * from t_user where uid= '1'
2)${}:select * from t_user where uid= '1'
4、#{} 和 ${} 的大括號(hào)中的值
(1)單個(gè)參數(shù)的情形
1)#{}
無MyBatis 默認(rèn)值弟翘,可任意虫腋,且與參數(shù)名無關(guān)
2)${}
<1>使用 MyBatis 默認(rèn)值 value,即 ${value}
<2>使用自定義參數(shù)名稀余,前提:在映射器接口方法的參數(shù)前加注解@Param("")
(2)多個(gè)參數(shù)的情形
1)#{}
<1>使用MyBatis 默認(rèn)值 arg0悦冀、arg1、arg2 … 或 param1睛琳、param2盒蟆、param3 …
<2>使用自定義參數(shù)名,前提:在映射器接口方法的參數(shù)前加注解@Param("")
2)${}
<1>使用MyBatis 默認(rèn)值 arg0师骗、arg1茁影、arg2 … 或 param1、param2丧凤、param3 …
<2>使用自定義參數(shù)名募闲,前提:在映射器接口方法的參數(shù)前加注解@Param("")
注:@Param("") 是 @Param(value="") 的簡(jiǎn)寫
5、#{} 和 ${} 在使用中的技巧和建議
(1)不論是單個(gè)參數(shù)愿待,還是多個(gè)參數(shù)浩螺,一律都建議使用注解@Param("")
(2)能用 #{} 的地方就用 #{}靴患,不用或少用 ${}
(3)表名作參數(shù)時(shí),必須用 {tableName}
(4)order by 時(shí)鸳君,必須用 {columnName}
(5)使用 {} 和 '${}'
參考:https://blog.csdn.net/siwuxie095/article/details/79190856