他们的区别一句话概括:#{name}对数据 加上 双引号,${name} 直接显示数据。
1、#{name}把传入的参数视为字符串,会预编译,
例子:select * from a where name = #{name} 入参name=哈哈
其实相当于 select * from a where name ="哈哈",
2、${name} 不会进行预编译,
例子:select * from a where name = #{name} ,入参name=哈哈,
其实相当于 select * from a where name =哈哈,
什么时候用${} 什么时候用#
(1)当你入参传过来的是一个字符串你可以用#
(2) 入参是一个数值 可以用${}
(3) MyBatis排序时使用order by 动态参数时,用$而不是#
(4)动态传表名字的时候,用$而不是#(select * from ${tableName} )
建议:能用#{}尽量用# #的优势就在于它能很大程度的防止sql注入,而$则不行
例子:如果前台查询调用查询a表数据sql
mybatis sql:select * from a where name=#{name} and state= #{state},如果前台传来的名称是“哈哈”,state字段是 “0 or state=1”,用#的方式就不会出现sql注入,而如果换成$方式,sql语句就变成了 select * from a where name=哈哈 and state= 0 or state=1。这样的话就形成了sql注入。