区别1:
#{} 相当于JDBC SQL语句中的占位符 “?”(PreparedStatement)
${} 相当于JDBC SQL语句中的连接符号 “+” (Statement)
所以,${} 存在SQL注入问题
区别2:
#{} 进行输入映射的时候,会对参数进行类型解析(如果是String类型,会自动加上引号)
${} 进行输入映射的时候,将参数原样输出到SQL语句中
所以在like条件查询中要小心
例如:
当查询条件中的name=”昆山花臂男”时
使用#{}
select * from user where username like '%#{name}%'
会得到如下的sql:
select * from user where username like '%'昆山花臂男'%'
这个sql会执行报错。
而使用${}时
select * from user where username like '%${name}%'
会得到如下的sql:
select * from user where username like '%昆山花臂男%'
该sql可以正常执行。
区别3:
#{} 如果进行简单类型(String,Date、8种基本类型的包装类)的输入映射时,#{}中参数名称可以任意
#{} 如果进行简单类型(String,Date、8种基本类型的包装类)的输入映射时,${}中参数名称必须是value
区别4:
#{}是通过反射取参数数据 (StaticSqlSource)
${}是通过OGNL表达式取参数数据 (DynamicSqlSource)