#{....} 相当于PreparedStatement 中的预编译占位符?,如 select * from table where id = ? 这样能避免SQL拼接,从而避免SQL注入, 而且预编译之后,语句会缓存,下次执行速度更快。
在进行替换的时候 #{}会自动补充单引号, 如 id =1;#{id},执行的语句就变成了 select * from table where id = ‘1’,
${} 则是单纯的字符拼接, 不会进行预编译 如 id=23131;${id} 执行的语句就变成了 select * from table where id = 23131 就会报语法错误,因为where 语句有时候条件需要引号,
综上在需要引号的字段用#{} 不需要的地方 如表的名称, select * from table 这里就必须用${} 因为table不允许带引号