首先看一下下面两个sql语句的区别:<select id="selectByNameAndPassword" parameterType="java.util.Map" resultMap="BaseResultMap"> select id, username, password, role from user where username = #{username,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR} </select> <select id="selectByNameAndPassword" parameterType="java.util.Map" resultMap="BaseResultMap"> select id, username, password, role from user where username = ${username,jdbcType=VARCHAR} and password = ${password,jdbcType=VARCHAR} </select> mybatis中的#和$的区别: 1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。 3、针对上面的sql,如果传入的值是;drop table user;, 那么第一条用#{}的sql解析为:select id, username, password, role from user where username=";drop table user;" 那么第二条用${}的sql解析为:select id, username, password, role from user where username=;drop table user; 这时候已经sql注入了。 3、#方式能够很大程度防止sql注入,$方式无法防止Sql注入。 |
|
来自: liang1234_ > 《数据库特性》