MyBatis中#{}和${}有哪些區(qū)別
前言
在MyBatis 的映射配置文件中,動(dòng)態(tài)傳遞參數(shù)有兩種方式:
1、#{} 占位符
2、${} 拼接符
#{} 和 ${} 的區(qū)別
區(qū)別1
#{} 為參數(shù)占位符 ?,即sql 預(yù)編譯
${} 為字符串替換,即 sql 拼接
區(qū)別2、
#{}:動(dòng)態(tài)解析 -> 預(yù)編譯 -> 執(zhí)行
${}:動(dòng)態(tài)解析 -> 編譯 -> 執(zhí)行
區(qū)別 3、
#{} 的變量替換是在DBMS 中
${} 的變量替換是在 DBMS 外
區(qū)別 4、
變量替換后,#{} 對應(yīng)的變量自動(dòng)加上單引號(hào)''
變量替換后,${} 對應(yīng)的變量不會(huì)加上單引號(hào) ''
區(qū)別 5、
#{} 能防止sql 注入
${} 不能防止sql 注入
#{} 和 ${} 的實(shí)例:假設(shè)傳入?yún)?shù)為 1
實(shí)例步驟一
#{}:select * from t_user where uid=#{uid} ${}:select * from t_user where uid= '${uid}'
實(shí)例步驟二
#{}:select * from t_user where uid= ? ${}:select * from t_user where uid= '1'
實(shí)例步驟三
#{}:select * from t_user where uid= '1' ${}:select * from t_user where uid= '1'
#{} 和 ${} 的大括號(hào)中的值
單個(gè)參數(shù)的情形
#{}
${}
多個(gè)參數(shù)的情形 #{}
${}
#{} 和 ${} 在使用中的技巧和建議
1、不論是單個(gè)參數(shù),還是多個(gè)參數(shù),一律都建議使用注解@Param("")
2、 能用 #{} 的地方就用 #{},不用或少用${}
3、表名作參數(shù)時(shí),必須用${}
。如:select * from ${tableName}
4、order by 時(shí),必須用 ${}
。如:select * from t_user order by ${columnName}
5、表名處用#{}會(huì)直接報(bào)錯(cuò);order by后面用#{}排序不生效
6、使用 ${} 時(shí),要注意何時(shí)加或不加單引號(hào),即${} 和 '${}'
。一般字段類型為char或者varchar時(shí)需要加單引號(hào)
總結(jié)
到此這篇關(guān)于MyBatis中#{}和${}有哪些區(qū)別的文章就介紹到這了,更多相關(guān)MyBatis中#{}和${}區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java8 實(shí)現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list
這篇文章主要介紹了Java8 實(shí)現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02Springboot中實(shí)現(xiàn)接口冪等性的4種方案小結(jié)
本文主要介紹了Springboot中實(shí)現(xiàn)接口冪等性,包含數(shù)據(jù)庫的冪等,數(shù)據(jù)庫的冪等,Redis的冪等性和Token + 時(shí)間戳的冪等性,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03詳解如何通過Java實(shí)現(xiàn)類似Nginx代理
最近遇到一個(gè)問題,在內(nèi)網(wǎng)環(huán)境中部署的項(xiàng)目需要調(diào)用外網(wǎng)完成一些應(yīng)用,一般情況我們可以通過增加一臺(tái)機(jī)器,部署到可以訪問外網(wǎng)的服務(wù)器上,然后內(nèi)網(wǎng)直接連接該機(jī)器通過Nginx進(jìn)行代理即可,所以本文介紹了如何通過Java實(shí)現(xiàn)類似Nginx代理,需要的朋友可以參考下2024-08-08SpringBoot使用validation進(jìn)行自參數(shù)校驗(yàn)的方法
在SpringBoot項(xiàng)目中,利用validation依賴可以通過注解方式校驗(yàn)數(shù)據(jù)庫交互參數(shù),提高代碼可讀性和維護(hù)性,此方法避免了硬編碼校驗(yàn)規(guī)則,方便后期規(guī)則變更,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-09-09maven在settings.xml和pom.xml中指定jdk版本編譯的方法
在開發(fā)Java應(yīng)用時(shí),通常需要指定要使用的Java版本,下面這篇文章主要給大家介紹了關(guān)于maven在settings.xm和pom.xml中指定jdk版本編譯的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05SpringBoot+Redis防止惡意刷新與暴力請求接口的實(shí)現(xiàn)
這篇文章主要為大家介紹了如何利用springboot和Redis來實(shí)現(xiàn)防止惡意刷新與暴力請求接口,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06java.exe和javaw.exe的區(qū)別及使用方法
這篇文章主要介紹了java.exe和javaw.exe的區(qū)別及使用方法,需要的朋友可以參考下2014-04-04