在mybatis中#{}与${}的区别
先来看两个例子,假设在数据库中有一个name字段,它的类型是varchar,当通过这个字段进行查询语句时,在xml文件中可以使用where name = #{name}或者where name = “${name}”。
假设在数据库中还有一个id字段,它的类型为int,当通过这个字段进行查询语句时,在xml文件中可以使用where id = #{id}
或者where id = ${id}。
在上面这两个例子中,我们可以看到#{}都没有加上双引号, ${ }有一个加上了双引号。之后通过尝试多种数据类型后发现,当为string类型的时候,#{ }会自动将其加上双引号, ${ }解析的时候不会加上双引号,原来是什么现在还是什么。因此 ${ }容易造成SQL注入,而#{}可以很大程度的防止这种。 ${ }一般用于order by 语句也就是排序,因此如果order by #{pwd},pwd是string类型,则这条排序语句就相当于:order by “pwd”,会报错。
注意:在一条sql语句中${}和#{}不要同时使用,否者会出错,因为 ${}和#{}在一条sql语句中,会立刻执行 ${}, #{}执行不了