詳解Mybatis中的 ${} 和 #{}區(qū)別與用法
Mybatis 的Mapper.xml語句中parameterType向SQL語句傳參有兩種方式:#{}和${}
我們經(jīng)常使用的是#{},一般解說是因?yàn)檫@種方式可以防止SQL注入,簡(jiǎn)單的說#{}這種方式SQL語句是經(jīng)過預(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語句再取值${} 這種是取值以后再去編譯SQL語句
#{}方式能夠很大程度防止sql注入。 $方式無法防止Sql注入。 $方式一般用于傳入數(shù)據(jù)庫對(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. 詳解sql server中數(shù)據(jù)庫快照工作原理2. Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接教程3. Mysql優(yōu)化方法詳細(xì)介紹4. MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例5. 關(guān)于MySQL的ORDER BY排序詳解6. centos編譯安裝mariadb的詳細(xì)過程7. Mybatis 一級(jí)緩存與二級(jí)緩存的實(shí)現(xiàn)8. 為SQLite3提供一個(gè)ANSI到UTF8的互轉(zhuǎn)函數(shù)9. MySQL多表查詢的具體實(shí)例10. 盤點(diǎn)SqlServer 分頁方式和拉姆達(dá)表達(dá)式分頁
