欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、介紹

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

使用#可以防止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ù)處理語句。而是直接將參數(shù)值拼接到SQL語句中。

使用$不會(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ù)處理語句的參數(shù)綁定,更安全,可以有效防止SQL注入;$直接將參數(shù)值拼接到SQL語句中,存在SQL注入的風(fēng)險(xiǎn)。

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

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

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

二、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 語句如下:

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

這個(gè) SQL 語句會(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ù)編譯過程

編譯后的 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)文章

  • Spring MVC學(xué)習(xí)教程之視圖深入解析

    Spring MVC學(xué)習(xí)教程之視圖深入解析

    這篇文章主要給大家介紹了關(guān)于Spring MVC學(xué)習(xí)教程之視圖解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用spring mvc具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-11-11
  • Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解

    Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解

    這篇文章主要介紹了Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java基礎(chǔ)必學(xué)TreeSet集合

    Java基礎(chǔ)必學(xué)TreeSet集合

    這篇文章主要介紹了Java必學(xué)基礎(chǔ)TreeSet集合,TreeSet集合實(shí)現(xiàn)了SortedSet接口,?可以對(duì)集合中元素進(jìn)行自然排序,?要求集合中的元素必須是可比較的。下文詳細(xì)介紹需要的朋友可以參考一下
    2022-04-04
  • Spring Boot 項(xiàng)目集成 Redisson 實(shí)現(xiàn)延遲隊(duì)列的詳細(xì)過程

    Spring Boot 項(xiàng)目集成 Redisson 實(shí)現(xiàn)延遲隊(duì)列的詳細(xì)過程

    本文介紹延遲隊(duì)列在訂單超時(shí)等場景的應(yīng)用及四種技術(shù)方案對(duì)比,推薦Redisson延遲隊(duì)列,提供項(xiàng)目結(jié)構(gòu)與測試源碼,對(duì)Spring Boot  Redisson延遲隊(duì)列相關(guān)知識(shí)感興趣的朋友一起看看吧
    2025-06-06
  • 模仿Spring手寫一個(gè)簡易的IOC

    模仿Spring手寫一個(gè)簡易的IOC

    這篇文章主要介紹了模仿Spring手寫一個(gè)簡易的IOC,幫助大家更好的理解和學(xué)習(xí)spring框架,感興趣的朋友可以了解下
    2020-11-11
  • java實(shí)現(xiàn)RedisTemplate操作哈希數(shù)據(jù)

    java實(shí)現(xiàn)RedisTemplate操作哈希數(shù)據(jù)

    RedisTemplate是Spring Data Redis提供的一個(gè)用于操作Redis的模板類,本文主要介紹了java實(shí)現(xiàn)RedisTemplate操作哈希數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    這篇文章主要介紹了IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java使用modbus-master-tcp實(shí)現(xiàn)modbus tcp通訊

    Java使用modbus-master-tcp實(shí)現(xiàn)modbus tcp通訊

    這篇文章主要為大家詳細(xì)介紹了另外一種Java語言的modbux tcp通訊方案,那就是modbus-master-tcp,文中的示例代碼講解詳細(xì),需要的可以了解下
    2023-12-12
  • Java關(guān)于BeabUtils.copyproperties的用法

    Java關(guān)于BeabUtils.copyproperties的用法

    這篇文章主要介紹了Java關(guān)于BeabUtils.copyproperties的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 解決json字符串序列化后的順序問題

    解決json字符串序列化后的順序問題

    這篇文章主要介紹了解決json字符串序列化后的順序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評(píng)論