MyBaits中的#和$的区别

在Mybatis的SQL xml映射文件中,有关参数传递的方法有两种,分别为#{}和${}。而这两种方式之间存在一定的差异。
默认情况下,使用#{}格式的语法会导致Mybatis创建PreparedStatement参数并安全地设置参数(就像使用?一样)。这样做更安全,更迅速,通常也是首选做法,不过有时你就是想直接在SQL语句中插入一个不转义的字符串。比如,像ORDER BY,你可以和这样来使用:ORDER BY ${columnName}

优先使用#{}
而${}会导致SQL注入的问题–所谓SQL注入就是将原有的SQL语句逻辑改变,使得SQL语句的执行结果和开发者的意图不一样。

#{}:用于变量的传递,一般用于传入添加、修改,或者查询、删除中where字句后的值

${}:简单的字符串拼接,可能会导致SQL注入的问题,比如select * from user where name = #{name},Mybatis会进行类型检查,不会出现问题;而select * from user where name = ${name},如果${name}的值是”a” or 1=1,那么这个where字句就失去了作用。所以,${}通常对应于SQL语句的非变量部分,用于传入数据库对象,如group by,order by,表名。

你可能感兴趣的:(Mysql)