最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis中$與#的區(qū)別解析

 更新時(shí)間:2025年07月11日 11:41:05   作者:dummy_(:зゝ∠)_  
文章瀏覽閱讀314次,點(diǎn)贊4次,收藏6次。MyBatis使用#{}作為參數(shù)占位符時(shí),會(huì)創(chuàng)建預(yù)處理語(yǔ)句(Prepared Statement),并將參數(shù)值作為預(yù)處理語(yǔ)句的參數(shù)綁定到SQL語(yǔ)句中。使用。

一、介紹

#(井號(hào)):MyBatis使用#{}作為參數(shù)占位符時(shí),會(huì)創(chuàng)建預(yù)處理語(yǔ)句(Prepared Statement),并將參數(shù)值作為預(yù)處理語(yǔ)句的參數(shù)綁定到SQL語(yǔ)句中。

使用#可以防止SQL注入攻擊,因?yàn)镸yBatis會(huì)自動(dòng)對(duì)參數(shù)值進(jìn)行轉(zhuǎn)義處理。

#{}內(nèi)部可以是參數(shù)的名稱或者參數(shù)的索引位置(例如#{param1}或者#{1})。

SELECT * FROM users WHERE username = #{username}

$(美元符號(hào)):MyBatis使用${}作為參數(shù)占位符時(shí),不會(huì)創(chuàng)建預(yù)處理語(yǔ)句。而是直接將參數(shù)值拼接到SQL語(yǔ)句中。

使用$不會(huì)對(duì)參數(shù)值進(jìn)行轉(zhuǎn)義,因此容易受到SQL注入攻擊,除非參數(shù)值是可信的或者已經(jīng)進(jìn)行了適當(dāng)?shù)奶幚怼?/p>

${}內(nèi)部通常是參數(shù)的名稱。

SELECT * FROM ${tableName} WHERE id = #{id}

$和#的主要區(qū)別:

a、安全性:#提供預(yù)處理語(yǔ)句的參數(shù)綁定,更安全,可以有效防止SQL注入;$直接將參數(shù)值拼接到SQL語(yǔ)句中,存在SQL注入的風(fēng)險(xiǎn)。

b、性能:#通常性能更好,因?yàn)轭A(yù)處理語(yǔ)句可以重復(fù)使用,而$每次都會(huì)生成新的SQL語(yǔ)句。

c、使用場(chǎng)景:#適用于大多數(shù)情況,特別是當(dāng)參數(shù)是用戶輸入時(shí);$適用于需要?jiǎng)討B(tài)指定表名或列名的情況,因?yàn)檫@些部分不能作為預(yù)處理語(yǔ)句的參數(shù)。

因此,除非有特殊需求,通常推薦使用#來(lái)提高SQL語(yǔ)句的安全性和性能。

二、sql注入風(fēng)險(xiǎn)實(shí)例

1、存在 SQL 注入風(fēng)險(xiǎn)的情況(使用 $):

// Mapper 接口
public interface UserMapper {
    User selectUserByUsername(String username);
}
// XML 映射文件(存在注入風(fēng)險(xiǎn))
<select id="selectUserByUsername" resultType="User">
    SELECT * FROM users WHERE username = '${username}'
</select>

攻擊示例:當(dāng)輸入的 username 為 ' OR '1'='1 時(shí),最終生成的 SQL 語(yǔ)句如下:

SELECT * FROM users WHERE username = '' OR '1'='1'

這個(gè) SQL 語(yǔ)句會(huì)讓所有用戶記錄都被返回。

2、安全處理方式(使用#)

// Mapper 接口
public interface UserMapper {
    User selectUserByUsername(String username);
}
// XML 映射文件(安全)
<select id="selectUserByUsername" resultType="User">
    SELECT * FROM users WHERE username = #{username}
</select>

3、預(yù)編譯過(guò)程

編譯后的 SQL:SELECT * FROM users WHERE username = ?
實(shí)際執(zhí)行時(shí):如果輸入的 username 是 ' OR '1'='1,JDBC 會(huì)對(duì)其進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義后的值為 \' OR \'1\'=\'1。
最終效果:查詢會(huì)去匹配一個(gè)名為 ' OR '1'='1 的用戶,顯然這樣的用戶是不存在的,注入攻擊也就失敗了。

到此這篇關(guān)于mybaits中$與#的區(qū)別解析的文章就介紹到這了,更多相關(guān)mybaits $與#區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法

    說(shuō)到Spring Boot 單元測(cè)試主要有兩個(gè)主流集成分別是Mockito,Junit,這個(gè)各有特點(diǎn),在實(shí)際開發(fā)中,我想要的測(cè)試框架應(yīng)該是這個(gè)框架集成者,本文給大家介紹了SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法,需要的朋友可以參考下
    2024-04-04
  • Java多態(tài)性抽象類與接口細(xì)致詳解

    Java多態(tài)性抽象類與接口細(xì)致詳解

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 解決idea的debug模式突然變卡,項(xiàng)目啟動(dòng)變慢的狀況

    解決idea的debug模式突然變卡,項(xiàng)目啟動(dòng)變慢的狀況

    這篇文章主要介紹了解決idea的debug模式突然變卡,項(xiàng)目啟動(dòng)變慢的狀況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 關(guān)于Java的HashMap多線程并發(fā)問題分析

    關(guān)于Java的HashMap多線程并發(fā)問題分析

    HashMap是采用鏈表解決Hash沖突,因?yàn)槭擎湵斫Y(jié)構(gòu),那么就很容易形成閉合的鏈路,這樣在循環(huán)的時(shí)候只要有線程對(duì)這個(gè)HashMap進(jìn)行g(shù)et操作就會(huì)產(chǎn)生死循環(huán),本文針對(duì)這個(gè)問題進(jìn)行分析,需要的朋友可以參考下
    2023-05-05
  • Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    這篇文章主要介紹了Spring Boot 訪問安全之認(rèn)證和鑒權(quán),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java?Stream常用方法合集(超詳細(xì))

    Java?Stream常用方法合集(超詳細(xì))

    Stream?API?提供了一種更為簡(jiǎn)潔高效的的方式來(lái)處理集合數(shù)據(jù),??可讀性較高,?所以本文為大家整理了Java?Stream中的常用方法,希望對(duì)大家有所幫助
    2023-07-07
  • Spring中Controller應(yīng)用深入理解

    Spring中Controller應(yīng)用深入理解

    這篇文章主要介紹了Spring項(xiàng)目中的Controller,Spring Controller本身也是一個(gè)Spring Bean,只是它多提供了Web能力,只需要造類上提供@Controller注解即可
    2022-12-12
  • Java While循環(huán) do-while循環(huán)用法

    Java While循環(huán) do-while循環(huán)用法

    循環(huán)語(yǔ)句就是讓計(jì)算機(jī)根據(jù)條件做循環(huán)計(jì)算,在條件滿足時(shí)繼續(xù)循環(huán),條件不滿足時(shí)退出循環(huán),需要的朋友可以參考下
    2020-11-11
  • 最新評(píng)論

    景宁| 仁布县| 仁化县| 永德县| 太谷县| 九龙城区| 巴林右旗| 逊克县| 昌江| 清涧县| 自治县| 积石山| 小金县| 黑山县| 新竹市| 德格县| 武宁县| 辽宁省| 崇阳县| 隆德县| 平阳县| 晋城| 阳西县| 洛阳市| 开阳县| 青浦区| 孝昌县| 湘潭县| 尼玛县| 宁武县| 天水市| 华宁县| 曲周县| 北票市| 竹溪县| 化德县| 丰都县| 开平市| 纳雍县| 合作市| 大安市|