詳解Mybatis中的 ${} 和 #{}區(qū)別與用法
Mybatis 的Mapper.xml語(yǔ)句中parameterType向SQL語(yǔ)句傳參有兩種方式:#{}和${}
我們經(jīng)常使用的是#{},一般解說(shuō)是因?yàn)檫@種方式可以防止SQL注入,簡(jiǎn)單的說(shuō)#{}這種方式SQL語(yǔ)句是經(jīng)過(guò)預(yù)編譯的,它是把#{}中間的參數(shù)轉(zhuǎn)義成字符串,舉個(gè)例子:
select * from student where student_name = #{name}
預(yù)編譯后,會(huì)動(dòng)態(tài)解析成一個(gè)參數(shù)標(biāo)記符?:
select * from student where student_name = ?
而使用${}在動(dòng)態(tài)解析時(shí)候,會(huì)傳入?yún)?shù)字符串
select * from student where student_name = ’lyrics’
總結(jié):
#{} 這種取值是編譯好SQL語(yǔ)句再取值${} 這種是取值以后再去編譯SQL語(yǔ)句
#{}方式能夠很大程度防止sql注入。 $方式無(wú)法防止Sql注入。 $方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名. 一般能用#的就別用$.舉個(gè)activiti工作流的例子:
select * from${prefix}ACT_HI_PROCINST where PROC_INST_ID_ =#{processInstanceId}
到此這篇關(guān)于詳解Mybatis中的 ${} 和 #{}區(qū)別與用法的文章就介紹到這了,更多相關(guān)mybatis ${} 和 #{}區(qū)別與用法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. DB2 與 Microsoft SQL Server 2000 之間的 SQL 數(shù)據(jù)復(fù)制2. DB2 XML 全文搜索之為文本搜索做準(zhǔn)備3. 細(xì)化解析:Oracle 10g ASM 的一點(diǎn)經(jīng)驗(yàn)4. MyBatis中$和#的深入講解5. MySQL InnoDB架構(gòu)的相關(guān)總結(jié)6. 解讀Oracle中代替like進(jìn)行模糊查詢的方法instr(更高效)7. MySQL Shell的介紹以及安裝8. 簡(jiǎn)單了解mysql InnoDB MyISAM相關(guān)區(qū)別9. Mysql InnoDB和MyISAM區(qū)別原理解析10. MySQL死鎖產(chǎn)生的原因和解決方法

網(wǎng)公網(wǎng)安備