提示:文章先作为初版,等后续时间充足后,补充更深的内容
Mybatis中#{}和${}的区别
在 MyBatis 中,#{} 和 ${} 都是用于向 SQL 语句中动态添加参数的语法,但它们的处理方式是不同的。
#{}
#{}:预编译处理,将传入的参数按照 JDBC 类型进行处理,能够很好地防止 SQL 注入攻击,因为它会将传入的参数值进行替换,替换为?号,并将参数值通过 PreparedStatement 传递给数据库,从而避免了 SQL 注入。
${}
${}:字符串拼接,将传入的参数直接按照字符串的形式拼接到 SQL 语句中,可以用于动态指定表名、列名等,调用Statement来赋值,但容易受到 SQL 注入攻击的影响,因为用户输入的参数值会被直接拼接到 SQL 语句中。
总之,使用 #{} 可以更加安全地构建 SQL 语句,并且能够防止 SQL 注入攻击,建议优先使用 #{} 语法。而使用 ${} 则需要谨慎对待,必须确保输入参数的安全性,避免受到恶意攻击。