#{}和${}的区别

#{}和${}的区别

Mybatis中 #{} 和 ${} 是传递查询参数的两种方式

#{}:

  • MyBatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ?
  • 预编译SQL,通过 PreparedStatement 的 setXxxx 的方法进行参数赋值。
  • 使用 #{} 可以有效地防止 SQL 注入

${}:

  • MyBatis 在处理 ${} 时,会直接把${} 替换为参数值
  • 存在 SQL 注入的风险。

总结:

  • #{} 比 ${} 安全,有效的防止SQL注入。
  • 预编译是提前对 SQL 进行编译,后面注入的参数不会对 SQL 的结构产生影响,从而避免安全风险。
  • #{} 针对输入字符串进行了转义过滤处理,能够防止SQL注入,适用于给SQL语句的where条件传值的使用场景。
  • ${} 设计就是用于参与SQL的语法生成,适用于需要通过传递值来拼接SQL语句的场景。
posted @ 2022-07-13 18:08  lyluoye  阅读(281)  评论(0编辑  收藏  举报