Mybatis 的 #{} 与 ${} 的区别
| 特性 | #{} | ${} |
|---|---|---|
| 本质 | 预编译(PreparedStatement) | 字符串替换(直接拼接) |
| 安全性 | ✅ 安全(防止SQL注入) | ❌ 不安全(易导致SQL注入) |
| 参数处理 | 自动添加单引号,参数类型安全 | 不加任何引号,直接拼接字符串 |
| 适用场景 | 值参数(如字符串、数字、日期等) | 动态表名、列名、排序字段等 |
| SQL执行效率 | ✅ 更高(利用数据库预编译缓存) | ⚠️ 较低(每次生成新SQL,无法缓存) |
| 是否推荐 | ✅ 默认首选 | ❌ 仅在必要时使用 |
| 特性 | #{} | ${} |
|---|---|---|
| 本质 | 预编译(PreparedStatement) | 字符串替换(直接拼接) |
| 安全性 | ✅ 安全(防止SQL注入) | ❌ 不安全(易导致SQL注入) |
| 参数处理 | 自动添加单引号,参数类型安全 | 不加任何引号,直接拼接字符串 |
| 适用场景 | 值参数(如字符串、数字、日期等) | 动态表名、列名、排序字段等 |
| SQL执行效率 | ✅ 更高(利用数据库预编译缓存) | ⚠️ 较低(每次生成新SQL,无法缓存) |
| 是否推荐 | ✅ 默认首选 | ❌ 仅在必要时使用 |