#{}和${}的区别
#{}和${}的区别
Mybatis中 #{} 和 ${} 是传递查询参数的两种方式
#{}:
- MyBatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ?
- 预编译SQL,通过 PreparedStatement 的 setXxxx 的方法进行参数赋值。
- 使用 #{} 可以有效地防止 SQL 注入。
${}:
- MyBatis 在处理 ${} 时,会直接把${} 替换为参数值
- 存在 SQL 注入的风险。
总结:
- #{} 比 ${} 安全,有效的防止SQL注入。
- 预编译是提前对 SQL 进行编译,后面注入的参数不会对 SQL 的结构产生影响,从而避免安全风险。
- #{} 针对输入字符串进行了转义过滤处理,能够防止SQL注入,适用于给SQL语句的where条件传值的使用场景。
- ${} 设计就是用于参与SQL的语法生成,适用于需要通过传递值来拼接SQL语句的场景。