Mapper.xml 中 #{} 和 ${} 的 区别

简单说

  • #{ 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 他都会检索多条记录。

所以在实际中尽可能选择 #{},除非迫不得已

你可能感兴趣的:(Mapper.xml 中 #{} 和 ${} 的 区别)