#{}:
通过大括号里面的参数,根据驼峰命名规则寻找相应的get方法,将参数注入
编译前
select * from user where name = #{name};
- 编译后
select * from user where name = ?;
${}:
- 编译前
select * from user where name = ${name};
- 编译后
select * from user where name = "Jack";
总结
用法:
能使用 #{ } 的地方就用 #{ }
首先这是为了性能考虑的,相同的预编译 sql 可以重复利用。
而${ }在预编译之前已经被变量替换了,这会存在 sql 注入问题。
若其中的值中包含类似–这样的符号,则后面的sql会被当做注解,使用#{}可以避免这一类问题。
那几种情况使用${}
- 变量为表名时,表名是字符串,使用 sql 占位符替换字符串时会带上单引号 ‘’,这会导致 sql 语法错误
- LIMIT后的分页参数