今天被面試官問到MyBatis中#{}和${}的區別。很尷尬,忘記了!!!
忘記了不要緊,重要的是重新撿起來使用練習。
${}和#{}都是占位符,占位符是什么呢,可以理解為MyBatis的一個變量
${} 注入什么就是什么,且如果是簡單類型的值需要用 value 來接收
{} 將傳入的數據都當成一個字符串,簡單的理解就是給你傳入的數據自動的加上一對引號
${}
<select id="getUser" parameterType="java.lang.String" resultType="com.kenneth.model.entity ">
SELECT * FROM t_user WHERE name = ${name}
</select>
當你的name傳入xiaoming時,sql會變成
SELECT * FROM t_user WHERE name = xiaoming
#{} (常用,對於sql注入有一定的防控作用)
<select id="getUser" parameterType="java.lang.String" resultType="com.kenneth.model.entity ">
SELECT * FROM t_user WHERE name = #{name}
</select>
當你的name還是傳入xiaoming時,sql會變成
SELECT * FROM t_user WHERE name = 'xiaoming'
注:小本子拿出來做筆記
#{}方式能夠很大程度防止sql注入;${}方式無法防止Sql注入。