${}
和 #{}
在 MyBatis 中都是用于 SQL 参数替换的符号,它们的区别主要体现在以下几个方面:
- 功能不同:
${}
是直接替换,而#{}
是预处理; - 使用场景不同:普通参数使用
#{}
,如果传递的是 SQL 命令或 SQL 关键字,需要使用${}
,但在使用前一定要做好安全验证; - 安全性不同:使用
${}
存在安全问题,如 SQL 注入,而#{}
则不存在安全问题。
所以,${}
和 #{}
在 MyBatis 中都是用于 SQL 参数替换的符号,然而使用 ${}
可能存在安全问题,所以在能用 #{}
时,尽量使用 #{}
时,否则可以考虑在充分验证了参数安全之后使用 ${}
。