- #{},预编译,是占位符,在mybatis处理sql的时候,#{}换成了?,调用PrepareStatement来赋值,参数当作一个字符串传入,给了问号,这个参数是用单引号括起来的。
- ${}, 是字符串接连,在mybatis处理sql时,${}直接换成了会传入的参数,调用 statement处理;有sql注入的风险,但是如果本身 自己就是想完全替换接连参数,就可以这样用了; mybatis处理之后 的sql是不自动带单引号的,如果需要,可以自己在参数里带上
3.e.g. 常用 查用户名和密码
传入的参数: name = "zhangsan" pwd = "123 or 1=1"
select * from t_user where name = #{name} and pwd = #{pwd}
mybatis处理之后
select * from t_user where name = 'zhangsan' and pwd= '123 or 1=1'
select * from t_user where name = ${name} and pwd = ${pwd}
mybatis处理之后
select * from t_user where name = zhangsan and pwd= 123 or 1=1
这里如果想把zhangsan带单引号,传入参数name = "'zhangsan'"
select * from t_user where name = 'zhangsan' and pwd = 123 or 1 = 1