Mybatis中$ {} 和 # {}的區別,動態SQL之if、where、set、trim、foreach標籤的使用

一.Mapper文件的補充細節

a) Xml的特殊字符
在mapper文件中,小於號用& lt;代替, 大於號用 & gt;代替

i.	<   &lt;  
ii.	>  &gt; 

b) $ {} 和 # {}的區別
i. 使用上,$ {}要獲取的參數值,對應的參數必須使用Param註解
ii. 底層上,
${}使用字符串拼接
#{}使用?佔位符

  1. 字符串拼接,可以拼接表名 列名 sql關鍵字
  2. ?佔位符,只能綁定數據,但可以避免sql注入攻擊

二.動態SQL

什麼是動態SQL?就是能夠根據不同的條件,產生不同 的SQL語句。

比如我們常見的多條件搜索框,可以根據姓名、性別、年齡、工資範圍等按照一定的條件進行搜素,
但如果我只輸入姓名搜素呢,或者按照姓名+年齡進行搜素呢,這樣排列組合情況就太多了,我們不可能一個條件去寫一個SQL的,
所以就需要我們根據用戶輸入的條件來動態的生成一條SQL語句。

Mapper文件中動態SQL常用的幾個標籤
< if> 作用:
滿足條件時執行sql,不滿足則不執行

< where> 作用:

  1. 會自動刪除if動態sql產生的多餘的and or前綴
  2. 會在if動態sql語句前添加where關鍵字

如下SQL語句所示:
在這裏插入圖片描述
< set>作用:
1.會自動if動態sql產生的多餘的逗號後綴
2.會在if動態sql語句前添加set關鍵字

在這裏插入圖片描述
< trim>作用:
可以自定義前綴和後綴:

在這裏插入圖片描述
< foreach> 循環遍歷,
常用來做批量刪除的時候用

如下圖所示:
collection:相當於集合名,
item表示集合中的一個元素,
open是循環之前要加的東西,
close是循環結束的時候要加的東西,
separator:元素間使用什麼分隔。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章