面试题:mybatis中# 和 $ 的区别

news/2024/11/15 1:01:15/

面试题:mybatis中# 和 $ 的区别

一、主要区别如下:

1、#{}可以理解为预处理,而${}是直接替换。

#传入的参数在SQL中显示为字符串,会对自动传入的数据加上双引号。
$传入的参数在SQL中直接显示为传入的值

2、#{}试用于所有类型的参数匹配,但${}只试用于数值类型

这个很好理解因为使用#{}传入的参数会以字符串的形式进行匹配,而${}传入的参数则是直接替换,数值类型你像Id这种直接替换还好,如果是字符Name这种传入一个名字直接替换的话就会出错。

3、#{}性能更高,并且没有SQL注入的安全性问题,但${}存在SQL注入的安全问题

4、大多数情况下还是经常使用#{},一般能用#的就别用$ ,但是有些情况下必须使用$ ,例如:MyBatis排序时,使用order by动态参数时候需要注意,用$ 而不是#。

二、详细分析一下子(看好了!!!)

1.1 如下的SQL语句,使用#{}传入name字段,根据name查询

    <select id="getUserByName" resultMap="UserMap">select * from mybatis.user where name = #{Name}</select>

上述的SQL语句解析后内容如下:
在这里插入图片描述
好,,我们可以从下图中看到使用#{}传入的name参数,其在解析后生成的SQL语句是预处理、预先占领然后传入了String类型的这样一个参数的效果。

1.2 于此相对,上述的SQL语句,我们使用${} 传入name字段

    <select id="getUserByName" resultMap="UserMap">select * from mybatis.user where name = ${Name}</select>

上述的SQL语句解析后内容如下:
在这里插入图片描述
在这里插入图片描述

我们可以很清楚的看到,使用 $ 这种方式是将我们的传入的参数直接替换到对应的SQL语句中,这样不仅会导致SQL注入的问题,而且很明显是怎么样,,错误的(因为使用$ {} 它没有对你传入的参数进行预处理,只是单纯的替换,那肯定不行,应该处理为String类型的数据,这也说明了为什么#{}试用于各种传入的数据类型的参数)。
因此,使用$ 只有当传入的数据类型为整数或是特定的场景下时(比如MyBatis排序时,使用order by动态参数时候需要注意,用$ 而不是#)才是合适的。


http://www.ppmy.cn/news/532411.html

相关文章

分片和一致性哈希

在设计大规模分布式系统时&#xff0c;你可能会遇到两个概念——分片&#xff08;sharding&#xff09;和一致性哈希&#xff08;consistent hashing&#xff09;。虽然我在网上找到了很多关于这些术语的解释&#xff0c;但它们让我感到有些困惑。我觉得分片和一致性哈希本质上…

兄弟j220怎么清零_兄弟打印机MFC_J220墨水回收盒满,该如何清零,望大神指教。...

展开全部 兄弟打e69da5e887aa62616964757a686964616f31333365646238印机MFC_J220墨水回收盒满清零方法&#xff1a; 1、首先检查一下打印机当前是否已经被设置为“暂停打印”&#xff0c;如果是的话&#xff0c;无论怎样向打印机发送打印命令&#xff0c;打印机肯定不会接受打印…

兄弟mfc9140cdn无法识别_兄弟Brother MFC-9140CDN打印机驱动

相关软件 软件大小 版本说明 下载地址 每个打印机在使用的时候都会有点小问题&#xff0c;那么这时就需要相对应的驱动来解决了&#xff0c;因此小编给大家带来了一款兄弟MFC-9140CDN驱动程序&#xff0c;欢迎下载&#xff01; 基本参数 产品定位多功能商用一体机 产品类型彩色…

兄弟打印机Linux驱动安装与CUPS共享

打印机&#xff1a;HL22260D 主机&#xff1a;Ubuntu 16.04 实现的需求&#xff1a;使打印机具备网络打印功能 要点&#xff1a; 兄弟官网下载驱动&#xff0c;见本文件目录下ubuntu16.04上解压&#xff0c;运行安装脚本按照脚本向导&#xff0c;注意选择正确的URL&#xff…

联想win11出现wifi图标消失

联想win11系统出现wifi图标消失&#xff0c;在控制面板的硬件查看是说网卡驱动没安装&#xff0c;但是用联想管家进行驱动检测也没有问题&#xff08;当没有网的时候&#xff0c;用手机数据线连接电脑开启热点&#xff0c;仅USB&#xff09;。不要重启&#xff0c;直接关机&…

解决ThinkPad联想 笔记本电脑无法连接隐藏网络问题-提示“无法连接这个网络”

我的是ThinkPad联想 E575 笔记本电脑&#xff0c;连接隐藏的WiFi一直连不起&#xff0c;尝试过之前网络上的很多方法&#xff0c;比如在网络共享中心 设置新的连接或网络>>手动连接到网络 的方式&#xff0c;但是依旧不行。 不过偶然解决了&#xff0c;发现很简单&…

计算机如何连接共享网络设置,联想电脑怎么设置共享网络

笔记本电脑内置有无线网卡&#xff0c;不仅能接收无线网络&#xff0c;还能分享无线网络&#xff0c;这样就充当了路由器的功能&#xff0c;也就是我们常说的热点分享&#xff0c;下面是小编给大家整理的一些有关联想电脑设置共享网络的方法&#xff0c;希望对大家有帮助! 联想…

联想电脑不显示WiFi 列表问题

电脑(win10系统)正用着突然断网 并且不显示WiFi列表 尝试了网上好几种方法&#xff1a;1、网络重置 2、CMD运行命令&#xff1a;netsh winsock..... 3、禁用WLAN wireless后再启用 等等方法。折腾了很久这些都不行 用下面链接的方法终于可以联网了&#xff0c;联想电脑果然不…