教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

mybatis中#{}和${}的區(qū)別是什么?

更新時間:2023年05月10日09時49分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  在MyBatis中,#{}和${}都是用于參數(shù)替換的占位符,但它們的行為有所不同。

  #{}會將參數(shù)作為預(yù)編譯的參數(shù)進行處理,可以防止SQL注入攻擊,并且能夠自動將傳入的參數(shù)進行類型轉(zhuǎn)換。在SQL執(zhí)行前,#{}中的占位符會被替換成問號,然后將參數(shù)值設(shè)置到PreparedStatement中。

  ${}則會將參數(shù)直接拼接到SQL語句中,因此容易受到SQL注入攻擊,并且不能自動進行類型轉(zhuǎn)換。在SQL執(zhí)行前,${}中的占位符會被替換成實際的參數(shù)值。

  下面是一個簡單的代碼示例:

<!-- 使用#{} -->
<select id="getUserById" resultType="User">
    SELECT * FROM user WHERE id = #{userId}
</select>

<!-- 使用${} -->
<select id="getUserByName" resultType="User">
    SELECT * FROM user WHERE name = '${userName}'
</select>

  在使用#{}的情況下,userId的值會被作為預(yù)編譯的參數(shù)進行處理,可以防止SQL注入攻擊,并且能夠自動進行類型轉(zhuǎn)換。而在使用${}的情況下,userName的值會被直接拼接到SQL語句中,容易受到SQL注入攻擊,并且不能自動進行類型轉(zhuǎn)換。因此,推薦使用#{}來替換參數(shù)。

0 分享到:
和我們在線交談!