#{}是参数预编译,参数的位置都是用?代替,参数是后来设置进去。
优点:安全,不会被sql注入
${}不是参数预编译,而是直接和sql语句进行拼串,不安全。
但$还是有使用场景,比如
1、动态更改表名,表名不支持预编译,只能用$。
2、在进行MySQL模糊匹配时也要用$,LIKE '%${id}%'才是对的,因为${id} 是不带单引号的,而#{id} 是带单引号的。使用#会报异常:Parameter index out of range (1 > number of parameters, which is 0)?。
3、排序时使用order by 动态参数时需要注意,用$而不是#