默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。

示例1:

执行SQL:Select * from emp where name = #{employeeName}

参数:employeeName=>Smith

解析后执行的SQL:Select * from emp where name = ?

执行SQL:Select * from emp where name = ${employeeName}

参数:employeeName传入值为:Smith

解析后执行的SQL:Select * from emp where name =Smith

说明:

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.

2. $将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id.

综上所述,${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}。

${}在什么情况下使用呢?

有时候可能需要直接插入一个不做任何修改的字符串到S

#{}与${}的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

  10. 判别模型和生成模型的区别

    20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...

最新文章

  1. ARM3级流水和5级流水为什么都是PC=PC+8
  2. 使用jMeter对基于SAP ID service进行Authentication的Restful API进行并发测试
  3. 谊品生鲜:放弃传统数据库架构,全站上阿里云
  4. 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
  5. 今日计划:修改Plog,为期2天
  6. 【Flink】Flink PipelineExecutor 体系
  7. 每天执行一次批处理_关于静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析...
  8. android gettext方法,方法getText()必须从UI线程(Android Studio)调用
  9. 善用工具和网上资源-决定学习的效率
  10. powerdesigner 数据类型与数据库数据类型对应
  11. 各个刷流量软件总结对比
  12. 【Vue五分钟】五分钟了解vue的常用实例方法
  13. 微信小程序开发 uniapp【bug修复】点击事件 传值 数据结构错误 $orig
  14. 2019利兹大学计算机排名,2019软科世界大学学术排名利兹大学排名第101-150
  15. 物质是世界,能量是本质
  16. win7 wi-fi热点_如何将Windows PC变成Wi-Fi热点
  17. 【blackduck】 Request failed authorization [HTTP Error]: XXX, response was 403 Forbidden.
  18. word锁定:解决Word文档由于文档保护而无法修改、查找、编辑的方法
  19. 将一个div中的两个P元素同一行居中显示
  20. 游戏盾防御攻击的原理

热门文章

  1. 【渝粤题库】国家开放大学2021春1439临床药理学题目
  2. 电源模块的9个主要性能指标及其作用
  3. Latex设置字体大小
  4. 一天一个C++程序(六)
  5. python取文本中间_Python读取两个字符串之间的特定文本行
  6. 最常出现的字符串 Most Common Word
  7. 《python网络数据采集》读后感 第六章:读取文档
  8. 设计模式----java的单例模式
  9. 标准C程序设计七---46
  10. 乐哥学AI_Python(二):Numpy索引,切片,常用函数