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