${keyword}
和 #{keyword}
是 MyBatis 中用于参数替换的两种不同的占位符形式,它们有以下区别:
-
${keyword}
:这是一种简单的字符串替换占位符形式,它会将占位符${keyword}
直接替换为传入的参数值。例如,在 XML 配置文件中使用${keyword}
,相当于在 SQL 语句中直接拼接参数的字符串表示。这种方式存在 SQL 注入的风险,因为参数值将直接插入 SQL 字符串中,所以需要自行转义或过滤用户输入。 -
#{keyword}
:这是一种更安全的参数绑定占位符形式,它会自动将传入的参数进行预编译和类型处理,并使用参数占位符?
替代#{keyword}
。MyBatis 会通过预编译的方式将参数值传递给底层数据库,从而避免了 SQL 注入的风险。此外,#{}
还提供了更多的功能,比如自动类型转换、防止特殊字符转义等。
总结起来,${}
是简单的字符串替换,而 #{}
是参数绑定占位符。在使用参数时,为了安全性和可维护性,推荐使用 #{}
的方式。它不仅可以防止 SQL 注入攻击,还可以处理参数值的类型转换等问题,更适合在 MyBatis 中进行参数绑定。
- 但上述图片中like使用,需要用$,
#
会报错