我们看下面一个mapper:
<mapper namespace="com.ys.Dao.peopleDao">
<select id="selectById" parameterType="_int" resultType="people">
select * from people where ID=#{ID};
</select>
</mapper>
上面的SQL语句中使用了#{ID},为何不使用${ID}呢?
他们的区别是:
1. #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,示例如下:
order by #{id}
//假如传入的id=11,那么SQL解析成
order by "11"
2. ${}将传入的数据直接显示生成在SQL中,示例如下:
order by ${id}
//假如id传入11,则SQL解析成:
order by 11
综上,#方式能够很大程度上防止SQL注入,而$方式无法防止SQL注入。
一般建议使用#,而不是$。