-
#{}是预编译处理,$ {}是字符串替换。
-
MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。
-
使用 #{} 可以有效的防止SQL注入,提高系统安全性。
-
在mybatis中的$与#都是在sql中动态的传入参数。
-
#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
-
sql语句中#{}表示一个占位符。
使用场景
在 Mapper.xml文件中实现动态传递参数 id:
#的使用
select * from user where id= #{id};
当传来参数id=1的时候,解析为:
select * from user where id= ?;
$的使用
select * from user where id= ${id};
当传来参数id=1的时候,解析为:
select * from user where id = "1";