码上敲享录 > Mybatis面试题 > MyBatis中的#和$有什么区别?

MyBatis中的#和$有什么区别?

上一章章节目录下一章 2023-07-16已有146人阅读 评论(0)

在 MyBatis 中,`#` 和 `$` 是两种不同的参数占位符使用方式。


1. `#`(预编译参数占位符):`#` 是 MyBatis 推荐使用的参数占位符,也称为预编译参数占位符。在使用 `#` 进行参数替换时,MyBatis 会自动将传入的参数值进行安全的预编译处理,以防止 SQL 注入攻击。`#` 可以被认为是一个占位符,MyBatis 会将其替换为一个预处理的参数,然后将该预处理参数传递给数据库驱动程序执行。使用 `#` 在 SQL 语句中,可以轻松适应各种数据类型,并且能够正确地处理特殊字符和转义字符。


  示例:`SELECT * FROM users WHERE id = #{userId}`


  在上述示例中,`#{userId}` 是一个预编译参数占位符。在执行 SQL 时,MyBatis 会将该占位符替换为预处理参数,并使用预处理参数执行查询。


2. `$`(字符串替换):`$` 是一种字符串替换占位符,也称为字符串拼接。使用 `$` 进行参数替换时,MyBatis 会直接将传入的参数值直接拼接到 SQL 语句中,不做预处理处理。这种方式有一定的灵活性,但由于没有进行预处理,可能存在 SQL 注入的风险,因此不建议直接使用用户输入进行拼接。


  示例:`SELECT * FROM users WHERE id = ${userId}`


  在上述示例中,`${userId}` 是一个字符串替换占位符。在执行 SQL 时,MyBatis 会直接用 `userId` 的值替换该占位符,形成最终的 SQL 语句。需要注意的是,使用 `$` 进行参数替换时,要注意安全性和潜在的 SQL 注入问题。


综上所述,`#` 是 MyBatis 推荐的参数占位符,能够提供更好的安全性和可靠性,而 `$` 则是字符串替换占位符,可能导致安全问题。在编写 SQL 语句时,建议使用 `#` 来处理参数。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交