${}和#{}的区别
Mybatis 的Mapper.xml语句中parameterType向SQL语句传参有两种方式:#{} 和 ${}
我们经常使用的是#{},一般解说是因为这种方式可以防止SQL注入,简单的说#{}这种方式SQL语句是经过预编译的,它是把#{}中间的参数转义成字符串。
举个例子:
select * from student where student_name = #{name}
预编译后,会动态解析成一个参数标记符?:
select * from student where student_name = ?
而使用${}在动态解析时候,会直接替换传入值。
select * from student where student_name = zhangsan
总结:
1、能用#{}时尽量用#{},#{}可以防止SQL注入。
2、用${}传入数据直接显示在生成的sql中,如上面的语句,${}方式无法防止sql注入。
3、$一般用入传入数据库对象,比如数据库表名;分表的过程中具体把数据放入那个表,可以使用这个。
select * from ${tablename} where username= #{username}
注意:
mybaties排序时使用order by 动态参数时需要注意,使用${}而不用#{}。