最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis的9種動態(tài)標簽詳解

 更新時間:2021年12月13日 16:12:48   作者:chenzm666666  
大家好,本篇文章主要講的是MyBatis的9種動態(tài)標簽詳解,感興趣的同學趕快來看一看吧,感興趣的同學趕快來看一看吧

前言

MyBatis提供了9種動態(tài)SQL標簽:trim、where、set、foreach、if、choose、when、otherwise、bind;
其執(zhí)行原理為,使用OGNL從SQL參數(shù)對象中計算表達式的值,根據(jù)表達式的值動態(tài)拼接SQL,以此來完成動態(tài)SQL的功能。

動態(tài)標簽用法

1.if

If : 當參數(shù)滿足條件才會執(zhí)行某個條件

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu WHERE age = 20 
 		 <if test="name != null">
    			AND name like #{name}
 	 	</if>
</select>

2.choose、when、otherwise

choose、when、otherwise : choose標簽是按順序判斷其內部when標簽中的test條件是否成立,如果有一個成立,則choose結束;如果所有的when條件都不滿足時,則執(zhí)行otherwise中的SQL。類似于java的switch語句。

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu WHERE age = #{age} 
	<choose>
 			 <when test="name != null">
    				AND name like #{name}
			</when>
			<when test="class != null">
					AND class like #{class}
			</when>
			<otherwise>
					AND class = 1
			</otherwise>
 	 </choose>
</select>

3.where

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu WHERE 
		<if test="age != null">
			age = #{age}
		</if> 
 		<if test="name!= null">
			AND name= #{name}
		</if> 
		<if test="class!= null">
			AND class = #{class}
		</if> 
</select>

當?shù)谝粋€if不滿或第一第二第三個if都不滿足,會出現(xiàn)以下情況

SELECT stu.name FROM tab_stu stu WHERE AND name = "小米" AND class ="1班”;
SELECT stu.name FROM tab_stu stu WHERE;

這會導致查詢失敗。使用where標簽可以解決這個問題

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu 
		<where> 
			<if test="age != null">
				age = #{age}
			</if> 
		 <if test="name!= null">
				AND name= #{name}
		</if> 
		<if test="class!= null">
				AND class = #{class}
		</if> 
	</where>
</select>

where標簽會在只有一個以上的if條件滿足的情況下才去插入WHERE關鍵字,而且,若最后的內容是”AND”或”O(jiān)R”開頭的,where也會根據(jù)語法絕對是否需要保留。

4.set

set標簽用于解決動態(tài)更新語句存在的符號問題

<update id="updateStu">
		Update tab_stu
		<set>
				<if test="name != null"> name=#{name},</if>
				<if test="age != null"> age=#{age},</if>
				<if test="class != null"> class=#{class},</if>
				<if test="subject != null"> subject=#{subject}</if>
		</set>
</update>

set標簽會動態(tài)前置SET關鍵字,同時也會消除無關的逗號,因為用了條件語句后,可能就會在生成的賦值語句的后面留下逗號。

5.trim

trim:trim標簽可實現(xiàn)where/set標簽的功能
Trim標簽有4個屬性,分別為prefix、suffix、prefixOverrides、suffixOverrides
prefix:表示在trim標簽包裹的SQL前添加指定內容
suffix:表示在trim標簽包裹的SQL末尾添加指定內容
prefixOverrides:表示去掉(覆蓋)trim標簽包裹的SQL指定首部內容,去掉多個內容寫法為and |or(中間空格不能省略)(一般用于if判斷時去掉多余的AND |OR)
suffixOverrides:表示去掉(覆蓋)trim標簽包裹的SQL指定尾部內容(一般用于update語句if判斷時去掉多余的逗號)

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu 
		<trim prefix="where" prefixOverrides="and |or">
				<if test="age != null">
						age = #{age}
				</if> 
 				<if test="name!= null">
						AND name= #{name}
				</if> 
				<if test="class!= null">
						OR class = #{class}
				</if> 
		</trim>
</select>
<update id=”updateStu”>
			Update tab_stu
			<trim prefix="set" subfix="where id=#{id}" suffixOverrides=",">
				<if test="name != null"> name=#{name},</if>
				<if test="age != null"> age=#{age},</if>
				<if test="class != null"> class=#{class},</if>
				<if test="subject != null"> subject=#{subject}</if>
			</trim>
</update>

6.foreach

foreach:對集合進行遍歷

<select id="findName" resultType="String">
 		SELECT stu.name FROM tab_stu stu where id in
		<foreach item=”item” index=”index” collection=”listName” open=”(” separator=”,” close=”)”>
				#{item}
		</foreach>
</select>

下面是foreach標簽的各個屬性:
collection:迭代集合的名稱,可以使用@Param注解指定,該參數(shù)為必選(java入?yún)?,相對?{listName})
item:表示本次迭代獲取的元素,若collection為List、Set或數(shù)組,則表示其中元素;若collection為Map,則代表key-value的value,該參數(shù)為必選
index:在List、Set和數(shù)組中,index表示當前迭代的位置,在Map中,index指元素的key,該參數(shù)是可選項
open:表示該語句以什么開始,最常使用的是左括弧”(”,MyBatis會將該字符拼接到foreach標簽包裹的SQL語句之前,并且只拼接一次,該參數(shù)是可選項
close:表示該語句以什么結束,最常使用的是右括弧”)”,MyBatis會將該字符拼接到foreach標簽包裹的SQL語句末尾,該參數(shù)是可選項
separator:MyBatis會在每次迭代后給SQL語句添加上separator屬性指定的字符,該參數(shù)是可選項

7.bind

bind:bind標簽可以從OGNL(對象圖導航語言)表達式中創(chuàng)建一個變量并將其綁定到上下文
Mybatis中使用Mysql的模糊查詢字符串拼接(like) 中也涉及到bind的使用

<select id="findName" resultType="String">
 		 SELECT stu.name FROM tab_stu stu 
		<where>
 				<if test="name!= null">
 						<bind name="stuName" value="'%'+stuName+'%'">
						name like #{stuName}
				</if> 
		</where>
</select>

到此這篇關于MyBatis的9種動態(tài)標簽詳解的文章就介紹到這了,更多相關MyBatis動態(tài)標簽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在?Java?中將Object?轉換為?Int的四種方法

    在?Java?中將Object?轉換為?Int的四種方法

    這篇文章主要介紹了在Java中如何將?Object?轉換為Int,本文研究了在?Java中將Object轉換為int的四種不同方法,結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Springboot分頁插件使用實例解析

    Springboot分頁插件使用實例解析

    這篇文章主要介紹了Springboot分頁插件使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 詳解lombok @Getter @Setter 使用注意事項

    詳解lombok @Getter @Setter 使用注意事項

    這篇文章主要介紹了詳解lombok @Getter @Setter 使用注意事項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 使用c3p0連接數(shù)據(jù)庫實現(xiàn)增刪改查

    使用c3p0連接數(shù)據(jù)庫實現(xiàn)增刪改查

    這篇文章主要為大家詳細介紹了使用c3p0連接數(shù)據(jù)庫實現(xiàn)增刪改查,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java Annotation(Java 注解)的實現(xiàn)代碼

    Java Annotation(Java 注解)的實現(xiàn)代碼

    本篇文章介紹了,Java Annotation(Java 注解)的實現(xiàn)代碼。需要的朋友參考下
    2013-05-05
  • 用Java程序判斷是否是閏年的簡單實例

    用Java程序判斷是否是閏年的簡單實例

    下面小編就為大家?guī)硪黄肑ava程序判斷是否是閏年的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • SpringBoot實現(xiàn)阿里云短信發(fā)送的示例代碼

    SpringBoot實現(xiàn)阿里云短信發(fā)送的示例代碼

    這篇文章主要為大家介紹了如何利用SpringBoot實現(xiàn)阿里云短信發(fā)送,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下
    2022-04-04
  • SpringBoot快速設置攔截器并實現(xiàn)權限驗證的方法

    SpringBoot快速設置攔截器并實現(xiàn)權限驗證的方法

    本篇文章主要介紹了SpringBoot快速設置攔截器并實現(xiàn)權限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • IDEA中關于enter鍵換行的問題

    IDEA中關于enter鍵換行的問題

    這篇文章主要介紹了IDEA中關于enter鍵換行的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java面向對象:API(接口)與集合(ArrayList)

    java面向對象:API(接口)與集合(ArrayList)

    這篇文章主要介紹了Java語言面向對象的API與集合,還是十分不錯的,這里給大家分享下,需要的朋友可以參考,希望能夠給你帶來幫助
    2021-08-08

最新評論

包头市| 海原县| 山阳县| 旬阳县| 岫岩| 广饶县| 奈曼旗| 安新县| 怀来县| 九江市| 栾川县| 克什克腾旗| 喀喇| 綦江县| 大同县| 阿拉善盟| 分宜县| 南昌县| 翁牛特旗| 望城县| 巴彦淖尔市| 禹城市| 翁牛特旗| 深州市| 遂川县| 教育| 靖西县| 丰县| 江山市| 临西县| 肇东市| 林州市| 紫金县| 蕉岭县| 开阳县| 建德市| 灵武市| 秀山| 炉霍县| 灌阳县| 阜阳市|