1.#{}和${}的区别是什么?
$ { }是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。
#{ }是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。
#{}是预编译处理,$ { }是字符串替换。
Mybatis在处理 # { }时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理 $ { }时,就是把${}替换成变量的值。
使用 #{ }可以有效的防止SQL注入,提高系统安全性。
一般能用 # 的就别用 $
$方式一般用于传入数据库对象,例如传入表名.
select * from user where name = #{name};
select * from user wher