MyBatis之#{}与${}的区别

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104809045







本篇博客主要讲解的是 MyBatis 中两种 动态 SQL 的语法:#{}${}

相信大学在学习 MyBatis 的时候,都会使用到 #{},而对 ${} 没怎么用过和见过,那是因为现在 #{} 已经彻底替换了 ${},使用 ${} 太不安全了。


一、#{} 与 ${} 的区别

对于这两者的区别,大家先了解下 #$# 相当于对数据 加上 双引号,$ 相当于直接显示数据。

#{}${} 他们都是用于进行参数处理。

#{} :在进行 SQL 预编译时,会把参数部分用一个占位符 ? 代替,这样可以防止 SQL 注入。

${} :它不会对参数进行任何处理,直接放入语句中,其实就是简单的字符串替换,并且该参数会参加 SQL 的预编译,我们如果想防止 SQL 注入,必须手动过滤参数。

所以现在在 MyBatis 中基本不会使用到 ${},只要是有关参数处理的地方都用 #{} 代替即可。



二、小栗子

# 的优势在于它能很大程度防止 SQL 注入,而 $ 不行。比如有这么一个小栗子:用户在进行一个登录操作时,后台 SQL 验证是这样的:

select * from user where user_name=#{name} and password = #{pwd};

如果前台传来的用户名是 “zhangsan”,密码是 “1 or 2”,用 # 的方式就不会出现 SQL 注入的危险;但是如果换成用 $ 方式,这条 SQL 语句就变成了:

select * from user where user_name=rookie and password = 1 or 2;

这样的话就形成了 SQL 注入。显然很不安全,所以大家在开发的时候一定要选择 #{},但是也要明白两者的区别。



博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/104809045