${} 注入什么就是什么,且如果是简单类型的值需要用 value 来接收
#{} 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
例如
Animal animal = mapper.findCarById("大熊猫");
通过执行上述代码给 xml 中的 findCarById 方法注入参数实现下面sql语句的拼接
SELECT * FROM animal WHERE name = "大熊猫"
使用${}
<select id="findAnimal rById" parameterType="java.lang.String" resultType="com.hello.pojo.Animal ">
SELECT * FROM animal WHERE name = "${value}"
</select>
使用#{}
<select id="findAnimal rById" parameterType="java.lang.String" resultType="com.hello.pojo.Animal ">
SELECT * FROM animal WHERE name = #{name}
</select>
#方式能够很大程度防止sql注入;$方式无法防止Sql注入。
$方式一般用于传入数据库对象,例如传入表名。
一般能用#的就别用$。MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
网友评论