国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mybatis之動態(tài)sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例

這篇具有很好參考價值的文章主要介紹了mybatis之動態(tài)sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

動態(tài)SQL

定義:根據(jù)不同條件拼接SQLy語句,實現(xiàn)對數(shù)據(jù)庫更準的操作。

實現(xiàn)方式:映射器配置文件或者注解

常用動態(tài)SQL元素

  1. if元素:判斷語句,但條件分支判斷
  2. choose元素:when、otherwise;多條件分支判斷,等同于Java中的switch
  3. trim元素:where,set;輔助元素,用于處理一些SQL拼接的問題
  4. foreach元素:foreach元素用于遍歷集合或數(shù)組
  5. bind元素:自定義上下文變量,傳遞參數(shù)

實體類中定義int還是Integer:一般情況下應(yīng)該定義為Integer,選擇的條件是判斷該值能不能為0,因為在動態(tài)sql中判讀是否輸入的條件是0(引用數(shù)據(jù)類型為null)

if元素

語法:

<if test="條件"> 滿足條件的語句</if>
如果需要多重條件進行判斷在test中用or或and連接;該表達式也稱為OGNL表達式(對象圖導(dǎo)航語言),中的字符串比較不能用equals比較;屬性名直接寫
eg:
	<select id="findStudnet" resultType="Student" parameterType="Student">
	 	select * from studnet where 
	 		<if test="classId != 0">
	 			classid = #{classId}
	 		</if>
	 		<if test="ssex != null">
	 			and ssex = #{ssex}
	 		</if>
	 </select>
	 
解決辦法一:在where后面加 1=1;但是where會對表中的數(shù)據(jù)逐行進行判斷,因此效率低

解決辦法二:

上面的案例存在問題:當傳入一個參數(shù)時正常,當傳入0個參數(shù)時where多余,當傳入兩個參數(shù)缺少and,解決辦法是引入where標簽;第一個and會自動去掉

<select id="findStudnet" resultType="Student" parameterType="Student">
	 	<!-- sql片段的使用 -->
	 	<include refid="sql1"></include>
	 	<where>
	 		<if test="classId != 0">
	 			and classid = #{classId}
	 		</if>
	 		<if test="ssex != null">
	 			and ssex = #{ssex}
	 		</if>
	 	</where>
	 </select>

choose 、when 、otherwise 元素

語法:

<choose>
	<when test="條件">滿足條件的語句</when>
    <otherwise>滿足其他條件條件的語句</otherwise>
</choose>
	 
eg:
	<select id="findStudentChoose" resultType="Student" parameterType="Student">
	 select * from student
	 	<where>
	 		<choose>
	 			<when test="sname != null">
	 				sname = #{sname}
	 			</when>
	 			<when test="birthday != null">
	 				birthday = #{birthday}
	 			</when>
	 			<when test="ssex != ssex">
	 				ssex = #{ssex}
	 			</when>
	           <!--	<otherwise>
	 				sid = 10
	 			</otherwise> -->
	 		</choose>
	 	</where>
	 </select>

注意:

  1. when中傳入?yún)?shù)不論是否有結(jié)果匹配到后面的when都不會執(zhí)行(等同于java中switch的break,前面的條件都為執(zhí)行otherwise中的內(nèi)容執(zhí)行,不是必須的)

trim 、where 、set 元素

where語法:

<where>
    <if test="條件">滿足條件的語句</if>
</where>



eg:
	<where>
		<if test="title != null">
        	and title = #{title}
        </if>
	</where>

where注意:

where 元素只會在至少有一個子元素的條件返回 SQL 子句的情況下才去插入“WHERE”子句。而且,若語句的開頭為“AND”或“OR”,where 元素也會將它們?nèi)コ?/p>

set語法:

<set>
    <if test = "條件">滿足條件的語句</if>
</set>

eg:
	<set>
        <if test = "title != null">
        	title = #{title}
        </if>
	</set>

注意:

set 標簽元素主要是用在更新操作的時候,它的主要功能和 where 標簽元素其實是差不 多的,主要是在包含的語句前輸出一個 set,然后如果包含的語句是以逗號結(jié)束的話將會把該逗號忽略,如果 set 包含的內(nèi)容為空的話則會出錯。有了 set 元素就可以動態(tài)的更新那些修改了的字段。

trim語法:

<trim prefix = “”suffixOverrides = “” prefixOverrides=“”suffix=“”></trim>
<!-- 
 prefix:在開始添加一個
 prefixOverrides:開始去掉一個
 suffix:結(jié)束添加一個
 suffixOverrides:結(jié)束去掉一個
-->

eg:
<update id="findStudentTrim" parameterType="Student">
		 update student
		 <trim prefix="set" suffixOverrides=",">
		 	<if test="sname != null">
	 			sname = #{sname},
	 		</if>
	 		<if test="birthday != null">
	 			birthday = #{birthday},
	 		</if>
	 		<if test="ssex != null">
	 			ssex = #{ssex},
	 		</if>
		 </trim>
		 where sid = #{sid}
	 </update>

foreach 元素

語法:

<foreach item="" index="" collection="" open="" separator="" close=""></foreach>

<!-- 
	item:循環(huán)中的當前元素
	index:當前循環(huán)位置的下標
	collection:方法傳遞的參數(shù),一個數(shù)組(array)或是一個集合(list,l為小寫)
	open:以什么符號開頭
	close:以什么符號結(jié)束
	separator:元素間的間隔符號
-->

eg:
<select id="findStudentArray" resultType="Student">
	select * from student
    <where>
    	<foreach item="sid" collection="array" open="sid in (" separator="," close=")">
        	#{sid}
        </foreach>
    </where>
</select>

批量插入數(shù)據(jù):將對象存入集合中,再通過 對象.屬性 將值賦給數(shù)據(jù)庫中的字段
<insert id="insertStudentForeach">
	 	insert into student (sname,birthday,ssex,classid)
	 	<foreach collection="list" open=" values"  separator="," item="stu">
	 		(#{stu.sname},#{stu.birthday},#{stu.ssex},#{stu.classId})
	 	</foreach> 	
</insert>

mybatis中的模糊查詢

五種模糊查詢:

  1. 方式一:業(yè)務(wù)層處理傳入’張%’ 不推薦,耦合度高
  2. 方式二:通過MySQL的函數(shù)進行模糊處理,推薦
  3. ${}:純字符串替換,不防止sql注入;不能用不能防止sql注入
  4. 方式四:通過sql語法進行特殊字符串拼接:#{v}“%”
  5. 方式五:bind標簽 官方推薦;
<select id="selectStudnetLike" parameterType="String" resultMap="Student">
	 	<!-- 方式一:業(yè)務(wù)層處理傳入'張%'  不推薦,耦合度高-->
	 	<!-- select * from student where sname like #{v} -->
	 	
	 	<!-- 方式二:通過MySQL的函數(shù)進行模糊處理 推薦 -->
	 	select * from student where sname like concat(#{v},'%')
	 	
	 	<!-- 方式三:不能用
	 		#{}:參數(shù)位置用?進項占位(sql預(yù)處理),然后用PreparedStatement進行傳參處理
	 		${}:純字符串替換,不防止sql注入
	 	-->
	 	select * from student where sname like '${v}%'
	 	
	 	<!-- 方式四:通過sql語法進行特殊字符串拼接 -->
	 	select * from student where sname like #{v}"%"
	 	
	 	<!-- 方式五:bind標簽 官方推薦 -->
	 	<bind name="x" value="_parameter+'%'"/>
	 	select * from student where sname like #{x}%
	 	
</select>

bind 元素

語法:文章來源地址http://www.zghlxwxcb.cn/news/detail-786980.html

<bind name=“” value=“_parameter”>
</bind>
<!--
name:自定義變量的變量名
value:自定義變量的變量值
_parameter:傳遞進來的參數(shù)
-->

eg:
<bind name = “name1” value = '%' + _parameter+ '%' ></bind>

到了這里,關(guān)于mybatis之動態(tài)sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件來實現(xiàn)一些增刪改查,此文對 其中的 if-else 加以說明 背景: 有一個引用類,假設(shè)叫 Student 現(xiàn)在我們查詢條件也被封裝成一個引用類,例如: 那么使用 xml 怎么來使用和接收呢? 首先肯定是在 mapper 里面有一個方法 然后在 xml 文件中寫這個方法的具體實

    2024年04月23日
    瀏覽(20)
  • sql示例:case when作為where 條件

    CASE WHEN語句的結(jié)果可以作為WHERE條件和其他條件一起使用,可以根據(jù)具體的需求來靈活組合。下面分別給出多個CASE WHEN語句在不同位置的SQL示例: CASE WHEN語句在WHERE條件中作為條件之一 上述代碼中,CASE WHEN語句在WHERE條件中作為一個條件,其中condition_1和condition_2表示需要滿足

    2024年02月16日
    瀏覽(52)
  • Mybatis中where標簽和if標簽結(jié)合使用說明

    由于不小心將 and 或者 or 寫在了語句后面,導(dǎo)致mybatis無法自主判別,這種問題在新上手的同學(xué)中很是常見。下面我們探討一下,在哪些情況下Mybatis無法判斷動態(tài)SQL語句中的 and 或者 or 。 select篩選出視圖對象的參數(shù),用于給前端返回頁面參數(shù)使用。 以下代碼格式是正確,我們

    2023年04月08日
    瀏覽(21)
  • 在Mybatis中如何在where-if的語句中判斷數(shù)組或列表的長度是否為0?

    可以使用OGNL表達式來判斷列表或數(shù)組的長度是否為0。OGNL是Object Graph Navigation Language的縮寫。它是一種表達式語言,用于從對象圖中進行導(dǎo)航和訪問。在Mybatis中,OGNL可用于在動態(tài)SQL語句中引用變量和方法。 假設(shè)要查詢一個列表,查詢條件包括一個列表idList,如果該列表或數(shù)

    2024年02月14日
    瀏覽(29)
  • SQL中的單條件判斷函數(shù)IF,和多條件判斷CASE WHEN的用法

    SQL中的單條件判斷函數(shù)IF,和多條件判斷CASE WHEN的用法

    在SQL中,條件判斷函數(shù)IF用于根據(jù)指定的條件返回不同的值。 condition:要判斷的條件。 value_if_true:如果條件為真,則返回的值。 value_if_false:如果條件為假,則返回的值。 假設(shè)有如下名為studensts的表,包含id、name和score字段: 我們想根據(jù)學(xué)生的分數(shù)判斷是否及格,并返回相

    2024年02月11日
    瀏覽(60)
  • 【Spring】— 動態(tài)SQL :<if>元素

    在MyBatis中, if 元素是常用的判斷語句,主要用于實現(xiàn)某些簡單的條件選擇。在實際應(yīng)用中,我們可能會通過多個條件來精確地查詢某個數(shù)據(jù)。 【示例8-1】下面通過一個具體的案例來演示元素的使用。 (1)創(chuàng)建一個名為chapter08的Web項目。 (2)將之前chapter06項目中的JAR包和

    2024年02月07日
    瀏覽(16)
  • mybatis trim標簽使用詳解

    mybatis trim標簽使用詳解

    mybatis的trim標簽一般用于去除sql語句中多余的and,逗號,或者給sql語句前拼接 “where“、“set“以及“values(“ 等前綴,或者添加“)“等后綴,可用于選擇性插入、更新、刪除或者條件查詢等操作。 以下是trim標簽中涉及到的屬性: prefix=添加前綴 suffix=添加后綴 prefix

    2024年02月06日
    瀏覽(28)
  • mybatis的<choose>標簽使用

    記錄 :418 場景 :使用MyBatis的choose/choose標簽的when/when標簽的test屬性,對入?yún)傩缘闹底龇莕ull(!=null)、非空(!=\\\'\\\')判斷,或者與常量做相等(==)或者不等判斷(!=)。 版本 :JDK 1.8,Spring?Boot 2.6.3,mybatis-3.5.9。 1.基礎(chǔ)知識 1.1MyBatis的標簽 (1)查看MyBatis支持的標簽 地址:http://mybatis.org/d

    2024年02月08日
    瀏覽(25)
  • mybtis動態(tài)SQL注解 腳本動態(tài)SQL\方法中構(gòu)建SQL\SQL語句構(gòu)造器

    分類 : 腳本動態(tài)SQL :XML配置方式的動態(tài)SQL,是用 script 的方式把它照搬過來,用注解來實現(xiàn)。適用于xml配置轉(zhuǎn)換到注解配置 方法中構(gòu)建SQL :@SelectProvider 、@InsertProvider、@UpdateProvider、@DeleteProvider 這些方法的使用 SQL語句構(gòu)造器 :實現(xiàn)動態(tài) SQL 的內(nèi)容 腳本動態(tài)SQL 在sql語句中加

    2024年01月21日
    瀏覽(44)
  • 使用動態(tài)sql時,if標簽不起作用

    使用動態(tài)sql時,if標簽不起作用

    目錄 場景: 問題分析: 問題解決: 簡單講一下應(yīng)用場景 我拿到一個項目,完成后端數(shù)據(jù)處理,在進行可選條件查詢時,使用動態(tài)sql ?在mapper.xml中我先是這么寫的 ?然后,就出現(xiàn)if標簽失效的情況,關(guān)鍵是它有時候也會返回到前端數(shù)據(jù),給我都搞蒙了 反復(fù)查看,加上網(wǎng)搜索

    2024年01月23日
    瀏覽(12)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包