1、#{}:占位符号,可以防止sql注入。
eg:
select * from user where username=#{username};
解析为:
select * from user where username=?;
#{}被解析为一个参数占位符
2、${}:sql拼接符号,存在sql注入问题。’
eg:
select * from user where username=${username};
如果传递的参数为"Tom",则解析为:
select * from user where username="Tom";
3、优先使用#{},因为KaTeX parse error: Expected 'EOF', got '#' at position 14: {}会导致SQL注入问题。#̲{}是经过预编译的,是安全的,…{}是未经过编译的,是不安全的。所谓的SQL注入就是将原有的SQL语句改变,使得SQL语句的执行结果与开发者的本身意图相违背。
预编译:数据库连接驱动在发送sql语句和参数给数据库之前就对SQL语句进行了编译,这样数据库在执行SQL语句时就不需要重新编译了。
4、#{}一般用于传入添加、修改,或者查询、删除where后的值。
${}通常对应于SQL语句的非变量部分,用于传入数据库对象,例如group by,order by,表名等。