参数占位符#{}和${}

#是预处理而$是直接替换

Mybatis在处理#{}时,会将SQL中的#{}替换成占位符?,再使用preparedStatement的set方法来赋值。
而Mybatis在处理 时,是将 {}时,是将 时,是将{}直接替换成变量的值

我们分别使用#{}和${}来查询userinfo表中名字叫admin的人

@Mapper
public interface UserMapper {Userinfo selectByName(@Param("username") String username);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper"><select id="selectByName" resultType="com.example.demo.entity.Userinfo">select * from userinfo where username=#{username}</select>
</mapper>

使用单元测试:

@Test
void selectByName() {String name = "admin";Userinfo userinfo = userMapper.selectByName(name);System.out.println("用户信息:" + userinfo);
}

image.png
将#{}变成${}
image.png

${}存在sql注入的风险

例如登入场景,需要输入用户名和密码,如果使用${}就存在sql注入的风险。
什么是sql注入
SQL注入应用程序对用户输入数据的合法性没有判断或者过滤不严,攻击者利用SQL语法,拼接上一些特殊的sql语句,欺骗MySQL执行一些非授权的任意查询。最经典的sql注入就是' or 1='1"

<select id="login" resultType="com.example.demo.entity.Userinfo">select * from userinfo whereusername='${username}' and password = '${password}'
</select>

得到的结果如下:
image.png
也就是使用${}通过直接替换到sql语句中,是直接当作SQL语句的一部分,替换进去的是依据SQL语法可以实现拆分使用,而使用#{}通过占位符,把传进去的参数当作一个整体使用。

${}的使用场景

在开发中大部分是使用#{},但存在即合理。当我们传递的参数是SQL关键字时,使用${}。
例如,淘宝中价格从高到低需要传递参数desc,此时不能使用#{},不然会将desc认为是string类型。

注意:在使用${}时,传过来的参数一定是可枚举的,要经过检查才能使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis AOF源码解析

本文取3.0版本分析&#xff08;各个版本差异很大&#xff0c;4.0以上才有aof和rdb混合模式&#xff09; 触发时机 1、bgrewriteaofCommand函数触发&#xff0c;即在Redis server服务上运行bgrewriteaof命令。 1-1、当前已经有 AOF 重写的子进程正在执行&#xff0c;重复执行bg…

JavaScript-Window对象

Window对象 BOM&#xff1a;浏览器对象模型 定时器-延时函数 JavaScript内置的一个用来让代码延迟执行的函数&#xff0c;setTimeout setTimeout(回调函数&#xff0c;等待的毫秒数);setTimeout仅仅只执行依次&#xff0c;所以可以理解为就是把一段代码延迟执行&#xff0c…

网络协议疑点记录

1.RIP, OSPF,BGP 首先什么是自治系统:治系统就是几个路由器组成了一个小团体 ?,小团体内部使用专用的协议进行通信,而小团体和小团体之间也使用专用的协议进行通信。 IGP RIP 距离矢量路由算法,bellman-ford算法,每个路由节点知道全局的路由信息,通过和邻居交换信息得…

五.单行函数

单行函数 1.函数的理解1.1什么是函数1.2不同DBMS函数的差异1.3MySQL的内置函数分类 2.数值函数2.1基本函数2.2角度与弧度互换函数2.3三角函数2.4指数与对数2.5进制间的转换 3.字符串函数4.日期和时间函数4.1获取日期、时间4.2日期与时间戳的转换4.3获取月份、星期、星期数、天数…

perl处理base64、md5、SHA-1、SHA-256的计算

使用perl可以进行base64、md5、SHA-1、SHA-256的计算&#xff0c;使用也非常方便&#xff0c;下面是示例代码&#xff1a; #! /usr/bin/perl use v5.14; use MIME::Base64; use Digest;my $test_str hello world;# 测试base64 say encode_base64($test_str);# 测试md5 my $md…

【Copilot】Edge浏览器的copilot消失了怎么办

这种原因&#xff0c;可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址&#xff0c;然后退出edge的账号&#xff0c;重新登录一遍&#xff0c;最后重启edge&#xff0c;就能够使得copilot侧边栏重新出现了。

【已解决】ModuleNotFoundError: No module named ‘pandas‘

问题描述 ModuleNotFoundError: No module named ‘pandas’ 解决办法 pip install pandas 完结撒花 熟悉的人相遇&#xff0c;就像久旱等到的甘霖

计算机基础知识66

Auth的补充 #概念&#xff1a;是django 的一个app&#xff0c;关于用户的登录&#xff0c;退出&#xff0c;注册... # 配置文件中配置&#xff1a;表会被迁移 INSTALLED_APPS [django.contrib.auth,] # auth有哪些表---权限控制&#xff1a; Permission&#xff1a;auth_permi…

Java 中连接 SQL 数据库

在 Java 中&#xff0c;连接 SQL 数据库通常使用 JDBC&#xff08;Java Database Connectivity&#xff09;。以下是使用 IntelliJ IDEA 连接 SQL 数据库的一般步骤&#xff1a; 1. 引入 JDBC 驱动&#xff1a;首先&#xff0c;你需要下载并引入与你所使用的数据库相对应的 JD…

Linux 导入、导出 MySQL 数据库命令

一、导出数据库 1、导出完整数据&#xff1a;表结构数据 mysqldump -u用户名 -p 数据库名 > 数据库名.sql 举例&#xff1a;以下命令可以导出 abc 数据库的数据和表结构 /usr/local/mysql/bin/mysqldump -uroot -p abc > abc.sql2、只导出表结构 mysqldump -u用户名 -p…

用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式

1、模式标准 模式名称&#xff1a;状态模式 模式分类&#xff1a;行为型 模式意图&#xff1a;允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构图&#xff1a; 适用于&#xff1a; 1、一个对象的行为决定于它的状态&#xff0c;并且它必须…

【C语言】字符串函数strcpystrcatstrcmpstrstr的使⽤和模拟实现

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

OCSP检查数字证书状态详解

文章目录 1. OCSP 的基本原理2. OCSP 的工作流程3. OCSP 的优势和不足4. OCSP Stapling5. OCSP 配置 OCSP&#xff08;Online Certificate Status Protocol&#xff09;是一种用于检查数字证书状态的协议。它提供了一种实时查询证书状态的方式&#xff0c;以确定证书是否被吊销…

prototype、__proto__、constructor、原型、原型链

结论&#xff1a; __proto__和constructor属性是对象所独有的&#xff1b; prototype属性是函数所独有的&#xff0c;由于函数也是一种对象&#xff0c;所以函数也拥有__proto__和constructor属性&#xff1b;__proto__属性的作用就是当访问一个对象的属性时&#xff0c;如果该…

C++ 多态性(Polymorphism)和 虚函数(Virtual Functions)

在 C 中&#xff0c;多态性&#xff08;Polymorphism&#xff09;是面向对象编程的一个重要概念&#xff0c;它允许通过基类指针或引用来调用派生类对象的特定方法。虚函数&#xff08;Virtual Functions&#xff09;是实现多态性的一种机制&#xff0c;通过在基类中声明虚函数…

InputStream和OutputStream速通

InputStream和OutputStream 输入流&#xff08;InputStream&#xff09;&#xff1a; InputStream是抽象类&#xff0c;用于从各种数据源&#xff08;如文件、网络连接、内存等&#xff09;读取字节流。常见的子类包括FileInputStream、ByteArrayInputStream和SocketInputStrea…

电源小白入门学习1——电源系统架构和相关指标

电源小白入门学习1——电源系统架构和相关指标 电源系统架构电源系统的指标及测量方法电源的效率电源的静态电流输出电压调整率纹波测量的注意事项动态负载测试 在开始本期内容之气&#xff0c;我先简单介绍一下我们电源小白学习系列内容&#xff1a;首先我是一个嵌入式小白&am…

【InsCode】新的代码管理工具inscode教程它和Git以及SVN的区别

InsCode 实践分享 InsCodeGitSVN类型代码管理工具分布式版本控制系统集中式版本控制系统分支管理支持强大的分支管理功能&#xff0c;包括创建、合并和删除分支支持分支管理&#xff0c;操作简单快捷支持分支管理&#xff0c;但操作相对复杂代码托管提供代码托管功能&#xff…

在VSCode中运行Python脚本文件时如何传参

以下实验所处的操作系统环境说明&#xff1a; OS版本MacOSMonterey 12.1VSCodeOctober 2023 (version 1.84.2) 一、背景 在 VSCode 中写好 Python 脚本后&#xff0c;如果要运行起来&#xff0c;可以怎么做呢&#xff1f; 一般有以下几种方式&#xff1a; 1、直接在 VSCode…

sentinel整合nacos配置中心持久化

在网上找了很多的资料&#xff0c;发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程&#xff0c;并且都需要修改前端&#xff0c;略显麻烦&#xff0c;至于剩下的熔断、热点流控、授权的更是没有相关的改造教程&#xff0c;最后在知乎的看到一篇文章后让…