詳解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)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式
為了批量處理大量圖片的旋轉(zhuǎn),可以使用javacv-ffmpeg結(jié)合ProcessBuilder,首先在maven配置文件中添加ffmpeg及javacpp依賴,javacpp支持調(diào)用C/C++方法,而ffmpeg基于C語(yǔ)言,使用ProcessBuilder創(chuàng)建進(jìn)程調(diào)用ffmpeg方法2024-09-09
SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能
這篇文章主要介紹了SpringBoot整合Sa-Token實(shí)現(xiàn)?API?接口簽名安全校驗(yàn)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Springboot項(xiàng)目快速實(shí)現(xiàn)攔截器功能
上一篇文章介紹了Springboot項(xiàng)目如何快速實(shí)現(xiàn)過(guò)濾器功能,本篇文章接著來(lái)盤(pán)一盤(pán)攔截器,仔細(xì)研究后會(huì)發(fā)現(xiàn),其實(shí)攔截器和過(guò)濾器的功能非常類似,可以理解為面向切面編程的一種具體實(shí)現(xiàn)。感興趣的小伙伴可以參考閱讀2023-03-03
多數(shù)據(jù)源模式JPA整合sharding-jdbc實(shí)現(xiàn)數(shù)據(jù)脫敏
這篇文章主要為大家介紹了JPA項(xiàng)目中多數(shù)據(jù)源模式整合sharding-jdbc來(lái)實(shí)現(xiàn)數(shù)據(jù)脫敏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

