在MyBatis中使用 # 和 $ 書(shū)寫(xiě)占位符的區(qū)別說(shuō)明
#將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)傳入的數(shù)據(jù)自動(dòng)加上引號(hào);
$將傳入的數(shù)據(jù)直接顯示生成在SQL中
注意:使用 $ 占位符可能會(huì)導(dǎo)致SQL注入攻擊,能用#的地方就不要使用 $
寫(xiě)order by 子句的時(shí)候應(yīng)該用 $ 而不是#
補(bǔ)充知識(shí):mybatis 中生成的字段不帶引號(hào) #{}和${}
最近在用mybatis,之前用過(guò)ibatis,總體來(lái)說(shuō)差不多,不過(guò)還是遇到了不少問(wèn)題,再次記錄下,
比如說(shuō)用#{},和 ${}傳參的區(qū)別,
使用#傳入?yún)?shù)是,sql語(yǔ)句解析是會(huì)加上'',比如 select * from table where name = #{name} ,傳入的name為小李,那么最后打印出來(lái)的就是
select * from table where name = ‘小李’,就是會(huì)當(dāng)成字符串來(lái)解析,這樣相比于$的好處是比較明顯對(duì)的吧,#{}傳參能防止sql注入,如果你傳入的參數(shù)為 單引號(hào)’,那么如果使用${},這種方式 那么是會(huì)報(bào)錯(cuò)的,
另外一種場(chǎng)景是,如果你要做動(dòng)態(tài)的排序,比如 order by column,這個(gè)時(shí)候務(wù)必要用${},因?yàn)槿绻闶褂昧?{},那么打印出來(lái)的將會(huì)是
select * from table order by ’name’ ,這樣是沒(méi)用,
目前來(lái)看,能用#就不要用$,
以上這篇在MyBatis中使用 # 和 $ 書(shū)寫(xiě)占位符的區(qū)別說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Access數(shù)據(jù)庫(kù)安全的幾個(gè)問(wèn)題2. 關(guān)于Oracle數(shù)據(jù)庫(kù)熱備份腳本深入剖析3. Sql server數(shù)據(jù)庫(kù)開(kāi)發(fā)常用匯總4. 如何遠(yuǎn)程調(diào)用ACCESS數(shù)據(jù)庫(kù)5. sqlserver數(shù)據(jù)庫(kù)導(dǎo)入方法的詳細(xì)圖文教程6. MySQL 的啟動(dòng)選項(xiàng)和系統(tǒng)變量實(shí)例詳解7. Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問(wèn)題及解決方法8. MySQL雙主(主主)架構(gòu)配置方案9. oracle數(shù)據(jù)庫(kù)id自增及生成uuid問(wèn)題10. Sqlserver之死鎖查詢(xún)以及批量解鎖的實(shí)現(xiàn)方法
