mybatis中 #{keyword} , ${keyword} 什么区别

发布时间 2023-07-20 09:22:18作者: 盘思动

${keyword}#{keyword} 是 MyBatis 中用于参数替换的两种不同的占位符形式,它们有以下区别:

  1. ${keyword}:这是一种简单的字符串替换占位符形式,它会将占位符 ${keyword} 直接替换为传入的参数值。例如,在 XML 配置文件中使用 ${keyword},相当于在 SQL 语句中直接拼接参数的字符串表示。这种方式存在 SQL 注入的风险,因为参数值将直接插入 SQL 字符串中,所以需要自行转义或过滤用户输入。

  2. #{keyword}:这是一种更安全的参数绑定占位符形式,它会自动将传入的参数进行预编译和类型处理,并使用参数占位符 ? 替代 #{keyword}。MyBatis 会通过预编译的方式将参数值传递给底层数据库,从而避免了 SQL 注入的风险。此外,#{} 还提供了更多的功能,比如自动类型转换、防止特殊字符转义等。

总结起来,${} 是简单的字符串替换,而 #{} 是参数绑定占位符。在使用参数时,为了安全性和可维护性,推荐使用 #{} 的方式。它不仅可以防止 SQL 注入攻击,还可以处理参数值的类型转换等问题,更适合在 MyBatis 中进行参数绑定。

  • 但上述图片中like使用,需要用$,#会报错