今天被面试官问到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注入。