#{} 和 ${} 之间最大的差别就是  #{}会在使用的时候被加上 ‘’ 引号, ${}直接传值,不做任何处理

1.#{}对传入的参数会做预编译,也就是会当做字符串来处理  

select * from info where name =  #{name}
比如传递 博客园,得到的结果就是如下
select * from info where name = '博客园'

2.${}对传入的参数不会做任何的处理,也就是说传递什么就是什么

select * from info where name = ${name]
比如传递 博客园 得到的结果就是如下
select * from info where name = 博客园

3.#{} 最大的好处就是可以很大程度上防止SQL注入(SQL Injection),然而${}则不具备这样的功能

比如我们在做用户登录的场景
使用#{}
select * from user where userCode = #{userCode} and userPwd = #{userPwd}
前台传递:userCode = 123 userPwd = 123 or 1 = 1
后台解析后,MyBatis首先会对SQL语句的参数用 ‘?’做预编译处理
select * from user where userCode = ? and userPwd = ?;
最终效果:
select * from user where userCode = '' and userPwd = '123 or 1 = 1';
这样就可以有效的防止了sql的注入效果 使用${}
select * from user where userCode = ${userCode} and userPwd = ${userPwd}
前台传递:userCode = 123 userPwd = 123 or 1 = 1
后台解析后,MyBatis会直接把值传递给sql,不做任何的处理!
最终效果:
select * from user where userCode = 123 and userPwd = 123 or 1 = 1;
不仅可能导致语法错误!而且更严重的会对导致用户恶意注入sql获取信息,或者做其它恶意操作!!非常危险!

4.说了这么多#{}的好处,好像${}被遗弃的婴儿一样(委屈),但是${}也是有很大作用的!如下:

比如我们在直接想用SQL语句插入一条原封不动的参数的时候,如order by我们的${}就派上用场了()
select * from info order by ${name}

重点:SQL注入是非常可怕的!!!(搞不好被罚工资或者直接牢底坐穿)!一定要注意使用场景!

最新文章

  1. 如丝般顺滑地从Windows迁移SQLServer数据库到Linux
  2. Doherty Threshold
  3. Ubuntu 16.04 安装ftp服务器传输文件
  4. C# System.Timers.Timer的一些小问题?
  5. [LINK]Scribe
  6. EntityFramework.Extended扩展用法
  7. UITableViewCell 高度自适应
  8. 提升Delphi编程效率必须使用的快捷键(Delphi2007版本)
  9. 当KDS晶振遇上爱普生晶振国内生产厂家该如何抉择?
  10. POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
  11. 创建jedis对象
  12. android的activity栈管理
  13. .net core EFCore CodeFirst 迁移出现错误【No project was found. Change the current working directory or use the --project option. 】
  14. hadoop集群的规划和搭建
  15. 高可用性的负载均衡方案之lvs+keepalived和haproxy+heartbeat区别
  16. Python二维数组,坑苦了
  17. 循环神经网络RNN及LSTM
  18. ASP.NET MVC 阻止通过Url直接访问服务器上的静态文件
  19. Study 2 —— 图片热点区域
  20. [BetterExplained]书写是为了更好的思考

热门文章

  1. POJ 3680:Intervals(最小费用最大流)***
  2. ifream子页面与父页面互调
  3. scrapy基础知识之 使用FormRequest.from_response()方法模拟用户登录:
  4. DStream转为DF的两种方式(突破map时元组22的限制)
  5. 上传文件不落地转Base64字符串
  6. Android开发-百度地图之电子围栏
  7. WinForm控件之【LinkLabel】
  8. hive merge into 批量更新测试
  9. SSAS多维设计模型与报表客户端-Excel透视表制作
  10. 洛谷 P1970 花匠