參數占位符#{}和${}

#是預處理而$是直接替換

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.pswp.cn/news/211968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211968.shtml
英文地址,請注明出處:http://en.pswp.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;最后在知乎的看到一篇文章后讓…