欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis中#{}与${}的区别

程序员文章站 2022-04-22 10:33:56
...

Mybatis中#{}与${}的区别

  • 在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。
  • .{ } 在预处理时,会把参数部分用一个占位符 ? 代替,而 ${} 则只是简单的字符串替换。

  • 例:name的值为张三

      select * from user where name = #{name};
    
      select * from user where name = '${name}';
  • 解析结果一样:

      select * from user where name = '张三';
  • 预编译中的处理是不一样:

      select * from user where name = ?;  -- #{}预处理
    
      select * from user where name = '张三';  -- ${}预处理
  • 因为 ${} 会导致 sql 注入的问题,开发中优先使用#{}。
  • 例:表名称为user;--

      select * from ${tableName} where name = '${name}';
  • 则动态解析之后 sql 如下:

      select * from user; -- where name = 张三;  -- 后面的会被注释掉,语句就变成了查询所有
  • 但是使用模糊查询时,常用 ${}进行拼接

  • 例:查询名字里带有小明(value)的信息

      SELECT * FROM USER  WHERE username LIKE '%${value}%';
  • 解析结果:

      SELECT * FROM USER WHERE username LIKE '%小明%' ;
  • 使用${}是字符串的拼接,记得加'${value}'
  • 例:

      SELECT * FROM USER  WHERE username = '${value}';