MyBatis中#{}和${}有哪些區別
前言
在MyBatis 的映射配置文件中,動態傳遞參數有兩種方式:
1、#{} 占位符
2、${} 拼接符
#{} 和 ${} 的區別
區別1
#{} 為參數占位符 ?,即sql 預編譯
${} 為字符串替換,即 sql 拼接
區別2、
#{}:動態解析 -> 預編譯 -> 執行
${}:動態解析 -> 編譯 -> 執行
區別 3、
#{} 的變量替換是在DBMS 中
${} 的變量替換是在 DBMS 外
區別 4、
變量替換後,#{} 對應的變量自動加上單引號''
變量替換後,${} 對應的變量不會加上單引號 ''
區別 5、
#{} 能防止sql 註入
${} 不能防止sql 註入
#{} 和 ${} 的實例:假設傳入參數為 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'
#{} 和 ${} 的大括號中的值
單個參數的情形
#{}
${}
多個參數的情形 #{}
${}
#{} 和 ${} 在使用中的技巧和建議
1、不論是單個參數,還是多個參數,一律都建議使用註解@Param("")
2、 能用 #{} 的地方就用 #{},不用或少用${}
3、表名作參數時,必須用${}
。如:select * from ${tableName}
4、order by 時,必須用 ${}
。如:select * from t_user order by ${columnName}
5、表名處用#{}會直接報錯;order by後面用#{}排序不生效
6、使用 ${} 時,要註意何時加或不加單引號,即${} 和 '${}'
。一般字段類型為char或者varchar時需要加單引號
總結
到此這篇關於MyBatis中#{}和${}有哪些區別的文章就介紹到這瞭,更多相關MyBatis中#{}和${}區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MyBatis Xml映射文件之字符串替換方式
- mybatis中的字符串拼接問題
- 基於mybatis like %%的問題
- Oracle生成隨機數字、字符串、日期、驗證碼及 UUID的方法
- mybatis的selectKey作用詳解