mybatis中#{}和${}的区别sql
5.$方式通常用于传入数据库对象,例如传入表名. 6.通常能用#的就别用$.数据库
MyBatis排序时使用order by 动态参数时须要注意,用$而不是#安全
字符串替换 默认状况下,使用#{}格式的语法会致使MyBatis建立预处理语句属性并以它为背景设置安全的值(好比?)。这样作很安全,很迅速也是首选作法,有时你只是想直接在SQL语句中插入一个不改变的字符串。好比,像ORDER BY,你能够这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。mybatis
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样作是不安全的。这会致使潜在的SQL注入攻击,所以你不该该容许用户输入这些字段,或者一般自行转义并检查。code
我以为#与$的区别最大在于:#{} 传入值时,sql解析时,参数是带引号的,而${}穿入值,sql解析时,参数是不带引号的。对象
一 : 理解mybatis中 $与#排序
在mybatis中的$与#都是在sql中动态的传入参数。 eg:select id,name,age from student where name=#{name} 这个name是动态的,可变的。当你传入什么样的值,就会根据你传入的值执行sql语句。
二:使用$与#字符串
#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。string
${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。编译
name-->cy
eg: select id,name,age from student where name=#{name} -- name='cy'
select id,name,age from student where name=${name} -- name=cy
sql语句中#{}表示一个占位符。