浅谈#{}与${}区别

jintaocode / 2023-08-15 / 原文

预编译为什么能一定程度上防止SQL注入

预编译和参数化查询将SQL查询语句和用户提供的输入值分开处理,从而防止SQL注入问题,预编译后SQL结构已经固定,可以防止非法输入参数对SQL结构的影响

#{}与${}区别

  • Mybatis在处理#{}时将其替换为?,然后调用PrepareStatement进行赋值,处理${}就是将其替换为变量的值。#{}可以有效防止SQL注入,${}可能出现SQL注入问题。
  • #{} 如果是字符串类型会将值附上引号然后替换之
  • ${} 直接将参数的值取出,直接拼接在SQL中