简单说
- #{ para } 产生的是 PreparedStatement 的占位符
- ${ something } 就相当于将字符串插入到 SQL 当中
在实际中我们尽可能使用前者而并非后者, 因为前者会对你插入的字符串做个简单的转换,能在一定程度上防止 SQL 注入。
举个例子
假设我们前端没有做验证
SELECT * FROM test WHERE name = ${name};
而有人选择传入参数 'Draper' OR 1=1 那么整体的 SQL 语句就会变成
SELECT * FROM test WHERE name = 'Draper' OR 1=1;
那么无论有没有 Draper 他都会检索多条记录。
所以在实际中尽可能选择 #{},除非迫不得已