mybatis入門--#{}和${}的區別

         我們知道,在mybatis中,sql語句是需要我們自己寫的。跟在普通的sql不一樣的是,我們在使用mybatis框架的時候,使用的佔位符不是

?
而是
#{}
有時候還會出現這個符號
${}
這些符號都代表啥呢?

          #{}表示一個佔位符號,通過#{}可以實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換,#{}可以有效防止sql注入。 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。

          ${}表示拼接sql串,通過${}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換,使用${}有造成sql注入的風險, ${}可以接收簡單類型值或pojo屬性值,如果parameterType傳輸單個簡單類型值,${}括號中只能是value。

          通過以上對比,我們可以發現,還是使用佔位符#{}比較安全,但是,在有些情況下,我們沒有辦法使用佔位符,只能使用拼接符。如:

<select id="findUserByUserName" parameterType="java.lang.String" resultType="cn.itcast.pojo.User">
		SELECT * FROM user where username like '%${value}%' and 1=1 --liyasong
</select>
          這時,我們可以通過js過濾的方法擋住一部分的sql注入,但是還是可以使用工具進行注入,這個問題如何解決目前樓主沒有進行研究,歡迎各位大神進行指導。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章