首先最明显的区别就是对于#{key}取值之后自动看成是字符串类型的,为为此带上单引号,而对于${}取值就是传的啥取出的就是啥。举个例子
select * from user u where u.name=#{name}
select * from user u where u.name=${name}
//这里我们假设name=admin
//对于以上二者翻译过来的语句就是
1.select * from user u where u.name='admin'
2.select * from user u where u.name=admin
有了这个例子很明显我们可以看到二者的区别,因而我们可以看到#{key}取值可以防止sql注入现象的发生,[SQL注入详解](https://www.cnblogs.com/myseries/p/10821372.html)