说下MyBatis中$和#有什么区别

Java面试 潘老师 8个月前 (09-06) 170 ℃ (0) 扫码查看

Java面试题:说下MyBatis中$和#有什么区别

得分点:

使用传参方式MyBatis创建SQL的不同、安全性和效率问题

标准回答如下:

在 MyBatis 中,有两种常见的方式来设置参数:使用 $ 和使用 #。这两种方式在创建 SQL 语句时有不同的行为,涉及到安全性和效率的问题。

使用 $ 设置参数:

  • 当使用 $ 设置参数时,MyBatis会创建普通的 SQL 语句。
  • 参数值会直接拼接到 SQL 语句中,而不是使用预编译的占位符。
  • 这种方式的执行效率相对较低,因为每次执行 SQL 都要将参数值拼接到 SQL 语句中。
  • 安全性方面存在潜在风险,因为参数值直接嵌入 SQL 语句,可能会受到 SQL 注入攻击的威胁。

使用 # 设置参数:

  • 当使用 # 设置参数时,MyBatis会创建预编译的 SQL 语句,其中参数使用占位符来表示。
  • 在执行 SQL 语句之前,MyBatis会为占位符赋值,然后执行预编译 SQL。
  • 这种方式的执行效率较高,因为 SQL 语句的结构不会发生变化,只是参数值发生变化。
  • 由于参数使用占位符,这种方式更加安全,能够有效防止 SQL 注入攻击。

总结:使用 # 设置参数是更安全和效率更高的方式,因为它使用预编译的 SQL 语句并保护免受 SQL 注入攻击。然而,在某些特殊情况下,如果需要动态传递列名、排序条件或其他动态 SQL 特性,可能需要使用 $ 来设置参数,尽管这会降低一些安全性和效率。在这种情况下,应特别注意过滤和验证传递的参数,以减少潜在的安全风险。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8818.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】