Mybatis中的#号与$符号的区别

2023-11-04

1、#{变量名}可以进行预编译、类型匹配等操作,

2、#{变量名}会转化为jdbc的类型。

3、${变量名}不进行数据类型匹配,直接替换。 

4、#方式能够很大程度防止sql注入。

5、$方式无法方式sql注入。

6、$方式一般用于传入数据库对象,例如传入表名。

7、尽量多用#方式,少用$方式。

8、#会自动加双引号,$不会加双引号

 这两个符号在mybatis中最直接的区别就是:#相当于对数据 加上 单引号,$相当于直接显示数据(只讨论字符串类型的)。

1、#对传入的参数视为字符串,也就是它会预编译,select * from user where name = #{name},比如我传一个aaa,那么传过来就是 select * from user where name = 'aaa';

2、$将不会将传入的值进行预编译,select * from user where name=${name},比如我传一个aaa,那么传过来就是 select * from user where name = aaa;

3、#的优势就在于它能很大程度的防止sql注入,而$则不行。比如:用户进行一个登录操作,后台sql验证式样的:select * from user where username=#{name} and password = #{pwd},如果前台传来的用户名是“wang”,密码是 “1 or 1=1”,用#的方式就不会出现sql注入,而如果换成$方式,sql语句就变成了 select * from user where username=wang and password = 1 or 1=1。这样的话就形成了sql注入。

4、MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查(通常我们应该对任何传来的参数都抱着不信任的做法来写程序,这样我们的程序才健壮)。
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis中的#号与$符号的区别 的相关文章

  • 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择 局部最优解 得到的结果是一个整体最优解 但是总是选择局部最优解并不总是能得到整体最优解 需要在问题具有 贪心选择性和优化子结构时才成立 贪心选择性 第一次做出贪心选择是正确的 优化子结构 第一次做完贪
  • Tarjan 强连通分量算法的 Java 实现

    强连通分量算法是图论中的一个重要算法 用于将有向图分解为若干个强连通分量 Tarjan 算法是其中一种常用的实现方式 它可以高效地找到图中的所有强连通分量 本文将介绍 Tarjan 强连通分量算法的 Java 实现 并提供相应的源代码 首先

随机推荐

  • 万用表的使用

    deprecate 反对 轻视 declaration 宣告 声明书 宣布 宣告 申报 arg argue 争论 论证 争辩 主张 认为 提供证据 证明 表明 原因等 type 类型 种类 打字 成为 的典型 function 功能 作用
  • [721]linux安装kafka及命令行使用

    文章目录 一 安装kafka 二 解压kafka 三 修改server properties文件 四 修改zookeeper properties文件 五 添加kafka启动脚本 六 启动kafka 七 命令行使用kafka 创建topic
  • Vue知识系列(4)每天10个小知识点

    目录 系列文章目录 Vue知识系列 1 每天10个小知识点 Vue知识系列 2 每天10个小知识点 Vue知识系列 3 每天10个小知识点 知识点 31 Vuex 四种属性的概念 作用 使用示例 32 Vuex 和单纯的全局对象 的概念 作
  • Linux磁盘分区和文件系统的关系

    一 Linux磁盘相关命令及作用 1 df命令 用于显示文件系统的磁盘空间使用情况 2 du命令 用于查看文件或目录的磁盘使用情况 3 fdisk命令 用于磁盘分区表的创建和管理 4 mkfs命令 用于创建文件系统 5 mount命令 用于
  • 华北电力计算机专业排名,华电考研计算机专业排名

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1354计算机软件与理论359 1355计算机软件与理论340 1356计算机软件与理论334 1357计算机软件与理论329 1358计算机软件与理论326 1359计算机软件与理论324 1
  • C++/C++11中引用的使用

    引用 reference 是一种复合类型 compound type 引用为对象起了另外一个名字 引用类型引用 refer to 另外一种类型 通过将声明符写成 d的形式来定义引用类型 其中d是声明的变量名 一 一般引用 一般在初始化变量时
  • Cocos2dx on Qt

    讨论贴在这里 http www cocos2d x org boards 6 topics 8043 page 1 准备 glew 库 bin glew32 dll gt windows system32 include GL gt VC
  • STM32F103时钟配置流程

    知识点 系统复位后 HSI振荡器被选为系统时钟 当时钟源被直接或通过PLL间接作为系统时钟时 它将不能被停止 STM32F103的三个可以作为系统时钟的时钟源 分别是HSI HSE PLL 而PLL的时钟源是HSI 2 内部RC振荡器二分频
  • 华硕计算机cpu怎么超频怎么设置,内存和CPU超频操作_华硕 ROG Rampage VI Apex_主板评测-中关村在线...

    进阶操作 进BIOS可能很多人都是为了去给CPU和内存进行超频 首先按F7进入到高级模式 华硕的主板选择Extreme Tweaker选项卡 有的主板是AI Tweaker或者超频设置等名字 Extreme Tweaker选项卡 内存超频
  • 如何使用postman做接口测试

    常用的接口测试工具主要有以下几种 Postman 简单方便的接口调试工具 便于分享和协作 具有接口调试 接口集管理 环境配置 参数化 断言 批量执行 录制接口 Mock Server 接口文档 接口监控等功能 JMeter 开源接口测试及压
  • Python中is和==(is not和!=)的区别

    Python中有很多种运算符 本文主要记录一下is和 这两种运算符的区别 id 函数是查看该对象所在内存地址 每个对象都有对应的内存地址 如 is 用于判断两个变量引用对象是否为同一个 用于判断引用变量的值是否相等 类似于Java中的equ
  • 华为OD机试 - 按单词下标区间翻转文章内容(Java)

    题目描述 给定一段英文文章片段 由若干单词组成 单词间以空格间隔 单词下标从0开始 请翻转片段中指定区间的单词顺序并返回翻转后的内容 例如给定的英文文章片段为 I am a developer 翻转区间为 0 3 则输出 developer
  • HJ26 字符串排序

    Powered by NEFU AB IN Link 文章目录 HJ26 字符串排序 题意 思路 代码 HJ26 字符串排序 题意 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如
  • PCL 计算点云法向量并显示

    目录 一 算法原理 1 法向量估计 2 法向量定向 3 表面曲率 4 参考文献 5 法向量定向的理解 6 CloudCompare 二 pcl Normal的定义 三 pcl Normal的几种输出方式 四 计算法线并显示 1 计算输入点云
  • 单点登录(简单的实现)

    假设现在有两个域名 分别为 分别记为client1 client2 client1 com client2 com 一个认证服务器 域名 ssoserver com client1 client2都需要登陆后才能访问到数据 现在想要实现cl
  • 76-C语言-输入班级学生的姓名和三科成绩,按总分排名

    问题 输入50分学生的姓名和三科成绩 按降序输出名字和总分 成绩相同的并列排名 思路 因为要学生排名 且一个学生有姓名 成绩 以及总分 所以弄一个学生的结构体 有多少学生 就输入该结构体的数组 一个for循环 给每个学生赋值 排序 降序 用
  • 【c++中的细节问题】关于typedef的详细用法

    请见 C C typedef用法详解 真的很详细 superhoy的专栏 CSDN博客 c typedef
  • 3.Linux文件管理和 I/O 重定向

    Linux文件管理和 I O 重定向 Linux文件系统目录结构 常见目录说明 根目录 一般根目录下只存放目录 在Linux下有且只有一个根目录 所有的东西都是从这里开始 当你在终端里输入 home 你其实是在告诉电脑 先从 根目录 开始
  • 利用多线程批Put方式压测HBase

    利用多线程批Put方式压测HBase 背景 在正式上生产之前 一定要对集群的组件做稳定性和性能压测 这是常识 这种压测当然不能指望那些只会鼠标点几下网页并经常指责前端页面样式有bug的测试去做 这种稍微有点技术含量的事情 她们其实有心无力
  • Mybatis中的#号与$符号的区别

    1 变量名 可以进行预编译 类型匹配等操作 2 变量名 会转化为jdbc的类型 3 变量名 不进行数据类型匹配 直接替换 4 方式能够很大程度防止sql注入 5 方式无法方式sql注入 6 方式一般用于传入数据库对象 例如传入表名 7 尽量