#{}和${}的区别是什么?
在mybatis中
#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理 $ {}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
在spring中有#的使用也有$的使用,那么这两个分别是做什么的呢?
${key名称}:
1、用户获取外部文件中指定key的值;
2、可以出现在xml配置文件中,也可以出现在注解@Value中;
3、一般用户获取数据库配置文件的内容信息等。
#{表达式}:
1、SpEL表达式的格式,详情(https://blog.csdn.net/xingfei_work/article/details/76058178);
2、可以出现在xml配置文件中,也可以出现在注解@Value中
3、可以任意表达式,支持运算符等。
SpEL:Spring Expression Language,spring的一套表达式,主要应用在IOC容器进行对象属性的注入。格式为:#{表达式}
在使用的时候也允许#{‘${key}’}这样使用。
比如:
@Value(“#{‘${jdbc.url}’}”)
private String jdbcUrl;