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

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

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

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

好口碑IT培訓(xùn)

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

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

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

  下面是一個(gè)簡單的代碼示例:

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

0 分享到:
和我們?cè)诰€交談!