1. 程式人生 > >myBatis的動態SQL之標籤的使用

myBatis的動態SQL之標籤的使用

有時候我們並不想應用所有的條件,而只是想從多個選項中選擇一個。而使用if標籤時,只要test中的表示式為true,就會執行if標籤中的條件。MyBatis提供了choose 元素。if標籤是與(and)的關係,而choose比傲天是或(or)的關係。

    choose標籤是按順序判斷其內部when標籤中的test條件出否成立,如果有一個成立,則choose結束。當choose中所有when的條件都不滿則時,則執行otherwise中的sql。類似於Java 的switch 語句,choose為switch,when為case,otherwise則為default。

    例如下面例子,同樣把所有可以限制的條件都寫上,方面使用。choose會從上到下選擇一個when標籤的test為true的sql執行。安全考慮,我們使用where將choose包起來,放置關鍵字多於錯誤。

<!-- 6 choose(判斷引數) - 按順序將實體類第一個不為空的屬性作為where條件 -->
<select id="getStudentList_choose" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity">
	SELECT ST.STUDENT_ID,
		   ST.STUDENT_NAME,
		   ST.STUDENT_SEX,
		   ST.STUDENT_BIRTHDAY,
		   ST.STUDENT_PHOTO,
		   ST.CLASS_ID,
		   ST.PLACE_ID
	  FROM STUDENT_TBL ST 
	<where>
		<choose>
			<when test="studentName !=null ">
				ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')
			</when >
			<when test="studentSex != null and studentSex != '' ">
				AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
			</when >
			<when test="studentBirthday != null ">
				AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
			</when >
			<when test="classId != null and classId!= '' ">
				AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}
			</when >
			<when test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">
				AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}
			</when >
			<when test="placeId != null and placeId != '' ">
				AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}
			</when >
			<when test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">
				AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}
			</when >
			<when test="studentId != null and studentId != '' ">
				AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}
			</when >
			<otherwise>
			</otherwise>
		</choose>
	</where>	
</select>

7 foreach

<!— 7.1 foreach(迴圈array引數) - 作為where中in的條件 -->
<select id="getStudentListByClassIds_foreach_array" resultMap="resultMap_studentEntity">
	SELECT ST.STUDENT_ID,
		   ST.STUDENT_NAME,
		   ST.STUDENT_SEX,
		   ST.STUDENT_BIRTHDAY,
		   ST.STUDENT_PHOTO,
		   ST.CLASS_ID,
		   ST.PLACE_ID
	  FROM STUDENT_TBL ST
	  WHERE ST.CLASS_ID IN 
	 <foreach collection="array" item="classIds"  open="(" separator="," close=")">
	 	#{classIds}
	 </foreach>
</select>

相關推薦

MyBatis動態SQL標籤的作用及使用

需求:查詢的時候,帶了帶了哪個條件就用哪個條件進行查詢 類似於Java 的 switch 語句的作用,其中只有一個判斷滿足條件。 可以通過標籤實現: —————————————————————————————— <select id="getPerson

Mybatis動態SQLforeach標籤遍歷結果集

當我們傳入一個集合作為引數時,我們可以採用foreach標籤將結果集遍歷出來再設定進SQL語句中。 xml對映檔案foreach部分內容: <!--foreach遍歷標籤 標籤屬性解析: 1.collection 傳入的集合名

myBatis動態SQL標籤的使用

有時候我們並不想應用所有的條件,而只是想從多個選項中選擇一個。而使用if標籤時,只要test中的表示式為true,就會執行if標籤中的條件。MyBatis提供了choose 元素。if標籤是與(and)的關係,而choose比傲天是或(or)的關係。     choose標籤是按順序判斷其內部when標

Mybatis動態SQLforeach標籤批量插入資料(MySQL版)

我們在MySQL中可以使用foreach標籤進行批量插入資料。 foreach中可以有兩種方式批量插入資料: 方式1: INTERT INTO TableName Values(值1,值2,值3….),(值1,值2,值3….)…. 方式2:

MyBatis從入門到精通(六):MyBatis動態Sqlif標籤的用法

最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用if標籤生成動態的Sql,主要包含以下3個場景: 根據查詢條件實現動態查詢 根據引數值實現動態更新某些列 根據引數值實現動態插入某

MyBatis從入門到精通(七):MyBatis動態Sqlchoose,where,set標籤的用法

最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用choose,where,set標籤生成動態的Sql。 1. choose 用法 假設有這樣1個需求:當引數id有值時優先使用id查

MyBatis從入門到精通(八):MyBatis動態Sqlforeach標籤的用法

最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用foreach標籤生成動態的Sql,主要包含以下3個場景: foreach 實現in集合 foreach 實現批量插入 forea

mybatis動態sqlforeach標簽

別名 per HA 次數 .get type 對象傳遞 CI select foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及在叠代結果之間放置分隔符。這個元素是

MyBatis動態sql${}和#{}區別

where 語句 替換字符串 客戶端 字符 註釋 tab reason mybatis 前言 ? 接觸mybatis也是在今年步入社會之後,想想也半年多了,缺沒時間去系統的學習,只知道大概,也是慚愧。 ? 不知道有多少剛畢業的同學和我一樣,到現在還沒仔仔細細去了解你每天都會

MyBatis動態SQL增、刪、改、查操作

概述 在實際的場景中,經常會遇到動態SQL的增、刪、改、查問題,這裡就必要說明何謂動態SQL,我們舉一個實際的例子,比如,在一個web工程中,經常會有一個搜尋框,並且在搜尋之前通常會進行一個關鍵詞的過濾,比如可以過濾的條件有:姓名、年齡等,這樣的話當我們姓名和年齡都不選,則等價於下面的S

mybatis動態SQLtrim

trim標記是一個格式化的標記,可以完成set或者是where標記的功能,如下程式碼:   1、   select * from user    <trim prefix="WHERE" prefixoverride="AND |OR">     &l

Mybatis動態SQL常用標籤

動態 SQL      MyBatis 的強大特性之一便是它的動態 SQL。如果你有使用 JDBC 或其它類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句的痛苦。例如拼接時要確保不能忘記新增必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL

Mybatis 動態sql if標籤 傳參的問題

關鍵程式碼://模糊查詢先給兩個條件public List<Flower> findFlower(@Param("name1")String name,@Param("price1")double price);<select id="findFlower"

ssm框架持久層mybatis動態sql標籤屬性大全

參考並轉自:https://www.cnblogs.com/zjfjava/p/8886432.html   1. 定義sql語句 1.1 select 標籤 id :唯一的識別符號. parameterType:傳給此語句的引數的全路徑名或別名 例:com.test.poso

mybatis動態SQL操作插入學習筆記

動態SQL操作之插入學習筆記1 import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import cn.itcast.javaee.mybatis.util.Myb

MyBatis-動態SQL的if、choose、when、otherwise、trim、where、set、foreach標籤的使用

動態SQL是MyBatis最強大的特性之一。用於實現動態SQL的主要元素如下: 1、if 2、choose、when、otherwise 3、trim、where、set 4、foreach 程式碼示例: 1、if

(十三)Mybatis動態SQL標籤使用

注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-09-DynamicSQL,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sql中),覺

Mybatis動態SQLchoose、when、otherwise

Mybatis中沒有if-else的寫法,取而代之的是choose-when-otherwise。choose在最外面,when相當於if,otherwise則相當於else。 <choose> <wh

mybatis學習路----動態sqlif條件判斷各種使用方式

點滴記載,點滴進步,願自己更上一層樓。 由於需要看到效果,所以這節最好可以將sql語句打印出來。參考 mybatis學習之路----列印sql語句 mybatis的if判斷語句其實跟el表示式的if條件判斷有些類似。 例如: <if test="id != nul

mybatis學習路----動態sqlchoose when otherwise

點滴記載,點滴進步,願自己更上一層樓。 choose節點,用法跟java中的switch 語法相似(官方文件這麼說,事實也是這樣)。 節點用法。 <choose>