#{}与${}
两者都是可以用来获取参数值的方式
#{}
占位符赋值,无论值为何,在sql拼接的时候都先用 ?占好位置,等数据库执行时再变成值
- 使用占位符的方式进行字符串拼接,如果我们的字段是字符串类型的数据,会自动加上单引号
- 代码执行经过:动态解析 预编译 编译 执行
${}
字符串拼接,本地拼接sql语句时就会将值做好拼接.
- 如果我们的字段是字符串类型数据,我们需要手动添加单引号
- 动态解析 编译 执行
什么是占位符?
- 占位符需要代码文件经过预编译,
- java文件通过预编译成为class文件,可以更快的再jvm上进行执行。
${}的sql注入问题
- 若在实操中未加单引号
- 改变原本sql语句规则的操作,就是sql注入;如在原本搜索语句基础上加上一个删除语句
结论
所以常用#{},会自动添加单引号;
若使用${}而又忘记添加单引号则可能会造成sql注入问题