Mybatis中#{}与${}的区别
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}';
 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号