${}和#{}的区别

1)#{}是预编译处理,$ {}是字符串替换。
2)mybatis在处理两个字符时,处理的方式也是不同的:
		①、处理#{}时,会将sql中的#{}整体替换为占位符(即:?),调用PreparedStatement的set方法来赋值;
		②、在处理 $ { } 时,就是把 ${ } 替换成变量的值。
3)假如用${}来编写SQL会出现:恶意SQL注入,对于数据库的数据安全性就没办法保证了。以下是示例:
		恶意SQL语法注入实例:

String sql="select * from user where name=’ “+ name+” ‘and passwd=’ "+var passwd+ " ’ ";
假若把[‘or’1’='1]作为passwd传入进来.用户名随意。会出现以下结果:
select * from user = 随意’ and passwd = ‘‘or’ 1’=‘1’;
因为’1’='1’肯定成立,所以可以任何通过验证,这就无法保证数据库数据的安全。

4)使用 #{} 可以有效的防止SQL注入,提高系统安全性:

	预编译的机制。预编译是提前对SQL语句进行预编译,而后再调用SQL,注入的参数就不会再进行SQL编译。而SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译时SQL时轻而易举的通过,从而导致数据泄露。而预编译机制则可以很好的防止SQL注入。

你可能感兴趣的:(经典题目和答案,java基础面试题,java)