#将传入的数据都当成一个字符串, 会对自动传入的数据加一个双引号如: order by #user_id#, 如果传入的值是 111, 那么解析成 sql 时的值为 order by 111, 如果传入的值是 id, 则解析成的 sql 为 order by id
$ 将传入的数据直接显示生成在 sql 中如: order by userid, 如果传入的值是 111, 那么解析成 sql 时的值为 order by user_id, 如果传入的值是 id, 则解析成的 sql 为 order by id
# 方式能够很大程度防止 sql 注入;$ 方式无法防止 Sql 注入
$ 方式一般用于传入数据库对象, 例如传入表名
一般能用 #的就别用 $MyBatis 排序时使用 order by 动态参数时需要注意, 用 $ 而不是 #
默认情况下, 使用 #{}格式的语法会导致 MyBatis 创建预处理语句属性并以它为背景设置安全的值 (比如?) 这样做很安全, 很迅速也是首选做法, 有时你只是想直接在 SQL 语句中插入一个不改变的字符串比如, 像 ORDER BY, 你可以这样来使用:
ORDER BY ${columnName};
这里 MyBatis 不会修改或转义字符串
重要: 接受从用户输出的内容并提供给语句中不变的字符串, 这样做是不安全的这会导致潜在的 SQL 注入攻击, 因此你不应该允许用户输入这些字段, 或者通常自行转义并检查
来源: http://www.bubuko.com/infodetail-2516739.html