MyBatis映射文件(XML)中參數傳遞和SQL特殊字符處理

1. 參數占位符

1.1?#{}?和?${}?的區別

  • #{}?占位符
  • 作用:安全傳參。MyBatis在執行SQL時,會把#{}替換成?,然后用參數值自動填充。
  • 優點:可以防止SQL注入,推薦使用。
  • 例子:
        select * from user where id = #{id}

    實際執行時會變成:select?*?from?user?where?id = ?,參數由MyBatis自動設置。

  • ${}?占位符
  • 作用:字符串拼接。MyBatis會直接把${}里的內容拼到SQL語句里。
  • 缺點:容易造成SQL注入風險,不推薦用于傳遞用戶輸入的參數。
  • 例子
        select * from ${tableName}

    如果tableName參數是user,實際SQL就是select?*?from?user。

    1.2 使用時機

  • 參數傳遞(如where條件、值等):都用#{},安全!
  • 動態設置表名、列名:只能用${},因為表名/列名不能用?占位。

2.?parameterType?屬性

  • 作用:用于設置Mapper方法參數的類型。
  • 說明:如果參數類型能被MyBatis自動推斷出來,可以省略不寫。
  • 例子:
      <select id="selectById" parameterType="int">select * from user where id = #{id}</select>

    但如果你的Mapper接口方法參數已經寫明類型,這里可以省略

3. SQL語句中的特殊字符處理

  • 轉義字符:如果SQL中需要寫特殊字符(如<、>、&等),需要轉義。
  • <![CDATA[?... ]]>:這是XML中的一種寫法,表示里面的內容不需要被XML解析器處理,可以直接寫SQL語句,包括特殊字符。
  • 例子:
        <select id="select"><![CDATA[select * from user where name like '%a%']]></select>

  • 好處:防止XML解析器把SQL里的特殊字符當成標簽或報錯。

總結口訣

  • 傳參用#{},拼接用${},表名列名才用${},防注入要記住。
  • parameterType能省則省,類型一致最保險。
  • 特殊字符用<![CDATA[ ... ]]>包裹,寫SQL更自由。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88818.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言 數據結構 --排序 (直接插入排序,選擇排序,交換排序......)

引言&#xff1a;本章簡潔的講解一下數據結構中的幾個常見的排序 &#xff0c;作復習之用&#xff0c;后面可能會補一些其他的排序 。并給出一些小編學習中遇到的坑&#xff0c;作借鑒。 1.直接插入排序 直接插入排序是一種簡單直觀的排序算法&#xff0c;其基本思想是將一個數…

華為云發布盤古大模型 5.5 新一代昇騰 AI 云服務上線

2025 年 6 月 20 日&#xff0c;華為開發者大會 2025&#xff08;HDC 2025&#xff09;在東莞召開。華為常務董事、云計算 CEO 張平安宣布基于 CloudMatrix 384 超節點的新一代昇騰 AI 云服務全面上線&#xff0c;并發布盤古大模型 5.5&#xff0c;五大基礎模型實現技術突破&am…

Reactor Handle

handle 是 Reactor 中一個非常靈活的操作符&#xff0c;它允許你對每個源元素進行處理&#xff0c;并可以選擇性地發出零個或多個元素。它既可以用于映射&#xff08;map&#xff09;也可以用于過濾&#xff08;filter&#xff09;&#xff0c;因此可以看作是 map 和 filter 的…

C#哈希加密:原理、實現與應用

C#哈希加密&#xff1a;原理、實現與應用 在當今數字化時代&#xff0c;數據安全是每個應用程序都必須重視的問題。哈希加密作為一種重要的加密技術&#xff0c;在密碼存儲、數據完整性驗證、數字簽名等領域發揮著關鍵作用。本文將深入探討C#中哈希加密的原理、常用算法以及實…

httpbin.org是什么,有什么作用

httpbin.org 是一個開源的 HTTP 請求與響應測試服務&#xff0c;基于 Python 的 Flask 框架開發 它允許開發者發送各種 HTTP 請求&#xff0c;并返回請求的詳細信息&#xff0c;便于調試和驗證 HTTP 客戶端的行為。以下是其核心功能和作用詳解&#xff1a; 一、核心功能與作用…

mongodb生產備份工具PBM

如果你的 MongoDB 數據量特別大&#xff08;例如幾十 GB、TB 級別&#xff09;&#xff0c;普通的 mongodump/mongorestore 會顯得緩慢且資源消耗大&#xff0c;不適合生產級別大數據集。下面是當前 MongoDB 社區和企業廣泛使用的幾種備份方案對比和推薦&#xff1a; 工具是否…

【LeetCode#第167題】兩數之和Ⅱ

給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < index2 < numbers…

Python(一)實現一個爬取微信小程序數據的爬蟲+工程化初步實踐

文章目錄 前言用Charles 抓包 iOS 微信小程序在Mac端和iOS端安裝Charles 自簽名證書Mac端iOS端 能抓到Safari瀏覽器的包但是抓不到微信小程序的包直接在iOS 上抓包的App如何抓取Android 7.0 以上/Harmony OS微信小程序包 Python 項目工程化pip 切換為國內鏡像源工程化參考腳手架…

uview ui request get / post 傳參含params和json數據的分析和使用

背景。單獨寫了controller方法去配合移動端的接口調用。但有的接口與pc端類似。于是進行了復用。但接口得復制不是。 uview js request 文檔 注意迪三個參數是header 后端接口GET方法 調用代碼截圖 瀏覽器調試 總結。 復制之前的api接口。為了方便復用底層實現。接口類型…

用 pnpm + TurboRepo,構建多項目高效開發體系

在現代前端項目日益復雜的今天&#xff0c;我們越來越多地面對一個場景&#xff1a;多個項目共享邏輯、組件和依賴&#xff0c;而維護和構建效率卻在不斷拉垮。這種情況下&#xff0c;傳統項目結構的痛點就顯現無遺。 從我親身實踐來看&#xff0c;選擇 pnpm TurboRepo 構建 …

Pytest 使用命令行參數執行指定環境的腳本—— Python 實踐

&#x1f9fe; 一、項目背景 在自動化測試中&#xff0c;我們經常需要根據不同的運行環境&#xff08;如測試環境和生產環境&#xff09;來執行測試腳本。本文將詳細介紹如何通過命令行參數來指定運行環境&#xff0c;并使用 Python 和 pytest 框架實現這一功能。 &#x1f6e…

利用可控驗證碼位數實現拒絕服務攻擊(DoS)風險與線程模型分析

一、背景介紹&#xff1a;驗證碼接口中的潛在 DoS 漏洞 在滲透測試過程中&#xff0c;常見驗證碼接口支持傳入“驗證碼位數”參數&#xff0c;表面看是業務可配置&#xff0c;實則若未做上限控制&#xff0c;極易成為資源消耗型 DoS 攻擊入口。 &#x1f9ea; 測試場景&#…

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護 在微服務架構中&#xff0c;服務之間的調用往往依賴 Feign&#xff0c;而服務調用的穩定性又至關重要。本文將介紹如何將 Feign 與 Sentinel 結合使用&#xff0c;實現服務的容錯保護&#xff08;如降級與熔斷&#…

寵物醫院系統的設計與實現(springBoot版)

一、開題報告 一、本選題研究的意義和背景&#xff08;理論與現實意義&#xff09;&#xff1a; 背景&#xff1a;隨著人們生活水平的提高&#xff0c;寵物飼養愈發普遍&#xff0c;寵物醫院的需求也日益增長。掛號方式主要依賴現場掛號&#xff0c;導致寵物主人需要長時間排隊…

SOCKSv5 協議通信的完整階段與報文格式詳解

SOCKSv5 協議的通信通常分為以下幾個主要階段&#xff1a; 方法協商階段 (Method Negotiation)方法依賴的子協商階段 (Method-Dependent Sub-negotiation) - 本例為用戶名/密碼認證請求發送階段 (Request Sending)請求回復階段 (Request Reply)數據傳輸階段 (Data Transfer) …

??Git提交代碼Commit消息企業級規范

??Git Commit 類型完整指南?? 類型用途示例??feat??新增功能&#xff08;面向用戶的功能性變更&#xff09;git commit -m "feat: 添加用戶登錄功能"??fix??修復 Bug&#xff08;解決代碼中的問題&#xff09;git commit -m "fix: 修復首頁加載崩潰…

TiDB AUTO_RANDOM 超大主鍵前端精度丟失排查:JavaScript Number 限制與解決方案

前端長整型主鍵“失蹤”記 ——一次 ArrayIndexOutOfBoundsException 的排查全過程 一、事故現場 最近在維護 SMS-OFFICE 后臺系統時&#xff0c;運維同事反饋&#xff1a; 點擊「短信詳情」或「郵箱賬號詳情」時&#xff0c;偶爾彈窗空白、日志報錯&#xff1a; java.lang.A…

在postgresql使用mybatis動態創建數據庫分區表

在postgresql使用mybatis動態創建數據庫分區表 1. 整體描述2. 前期準備2.1 創建主表語句2.2 創建分表語句2.3 xxl-job 3. 代碼實現3.1 mapper.xml層3.2 mapper.java層3.3 service接口層3.4 service實現層3.5 controller層 4. 總結 1. 整體描述 在java下實現&#xff1a;創建分…

Python網安-zip文件暴力破解

目錄 源碼在這里 需要的模塊 準備一個密碼本和需要破解的ZIP文件 一行一行地從密碼文件中讀取每個密碼。 核心部分 注意&#xff0c;需要修改上段代碼注釋里的這段具有編碼問題的代碼&#xff1a; 源碼在這里 https://github.com/Wist-fully/Attack/tree/cracker 需要的…

聊聊Golang開發工程師

誕生背景 Go由Google三位頂尖工程師&#xff08;Ken Thompson、Rob Pike、Robert Griesemer&#xff09;設計&#xff0c;目標是解決兩大行業痛點&#xff1a; 硬件利用率不足&#xff1a;多核CPU普及&#xff0c;但C/C等語言難以高效利用并發能力&#xff1b; 開發效率低下&a…