1、#{}是经过预编译的,是安全的;
${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
2、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
where username=#{username},如果传入的值是111,那么解析成sql时的值为where username="111",
如果传入的值是id,则解析成的sql为where username="id".
3、$将传入的数据直接显示生成在sql中。
where username=${username},
如果传入的值是111,那么解析成sql时的值为where username=111;
如果传入的值是;drop table user;,则解析成的sql为:
select id, username, password, role from user where username=;drop table user;