${}#{} 在 MyBatis 中都是用于 SQL 参数替换的符号,它们的区别主要体现在以下几个方面:

  1. 功能不同${} 是直接替换,而 #{}是预处理;
  2. 使用场景不同:普通参数使用 #{},如果传递的是 SQL 命令或 SQL 关键字,需要使用 ${},但在使用前一定要做好安全验证;
  3. 安全性不同:使用 ${} 存在安全问题,如 SQL 注入,而 #{} 则不存在安全问题。

所以,${}#{} 在 MyBatis 中都是用于 SQL 参数替换的符号,然而使用 ${} 可能存在安全问题,所以在能用 #{} 时,尽量使用 #{} 时,否则可以考虑在充分验证了参数安全之后使用 ${}

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】