在mybatis中#和$的主要區(qū)別是:#傳入的參數(shù)在SQL中顯示為字符串,#方式能夠很大程度防止sql注入;$傳入的參數(shù)在SqL中直接顯示為傳入的值,$方式無(wú)法防止Sql注入。

MyBatis?是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
動(dòng)態(tài) sql?是 mybatis 的主要特性之一,在 mapper 中定義的參數(shù)傳到 xml 中之后,在查詢之前 mybatis 會(huì)對(duì)其進(jìn)行動(dòng)態(tài)解析。mybatis 為我們提供了兩種支持動(dòng)態(tài) sql 的語(yǔ)法:#{} 以及 ${};兩者都是動(dòng)態(tài)的向sql語(yǔ)句中傳入需要的參數(shù)。
mybatis中#和$的區(qū)別是什么
1、傳入的參數(shù)在SQL中顯示不同
#傳入的參數(shù)在SQL中顯示為字符串(當(dāng)成一個(gè)字符串),會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。
例:使用以下SQL
- select id,name,age from student where id =#{id}
當(dāng)我們傳遞的參數(shù)id為 “1” 時(shí),上述 sql 的解析為:
- select id,name,age from student where id =”1″
$傳入的參數(shù)在SqL中直接顯示為傳入的值
例:使用以下SQL
- select id,name,age from student where id =${id}
當(dāng)我們傳遞的參數(shù)id為 “1” 時(shí),上述 sql 的解析為:
- select id,name,age from student where id =1
2、#可以防止SQL注入的風(fēng)險(xiǎn)(語(yǔ)句的拼接);但$無(wú)法防止Sql注入。
3、$方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名。
4、大多數(shù)情況下還是經(jīng)常使用#,一般能用#的就別用$;但有些情況下必須使用$,例:MyBatis排序時(shí)使用order by 動(dòng)態(tài)參數(shù)時(shí)需要注意,用$而不是#
以上就是本篇文章的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)有所幫助。更多精彩內(nèi)容大家可以持續(xù)關(guān)注?。?!為大家?guī)?lái)更多更優(yōu)秀的學(xué)習(xí)資源。有其他建議和意見(jiàn)歡迎評(píng)論區(qū)探討交流。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至2705686032@qq.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。原文轉(zhuǎn)載: 原文出處: