#{}:预编译语句,用?对参数位置进行一个占位的操作,在数据库生成一个模版,等待后续填充.也可以推测出#在生成模版后的性能是比$快的.
${}:即时语句,提前的吧参数填充进去,在MySQL里就是一个完整的SQL语句.
填充逻辑不同
#{}会给String类型的参数自动的加上双引号,而${}则是直接填充.单着也给#带来了一些麻烦.比如在order by 的时候 的顺序desc和asc都是字符串,却不能加双引号,模糊查询的时候涉及到许多关键字的选择也是字符串这个时候也很麻烦.所以要选择性的用.
安全性
为什么说#比$安全呢,$相当于自己写一个SQL语句,而#则是MySQL给你一个模版,我们负责填值.值再花里胡哨那也和表的结构没啥关系.