精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费


學AI,好工作 就找北大青鳥
關注小青 聽課做題,輕松學習
周一至周日
4000-9696-28

MyBtis的動態SQL

來源:北大青鳥總部 2023年03月06日 09:30

摘要: MyBatis作為一個優秀、輕巧、靈活的持久層框架,既解決了我們和數據庫交互的繁瑣的代碼,同時也滿足了我們寫SQL的愿望(真正是因為我們自己寫SQL的可以優化SQL的執行效率)。

作為一名優秀的Java后端工程師,不得不說,跟數據庫打交道的次數比跟自己女朋友(程序猿沒有女朋友,原諒我這個不那么恰當的比喻)一起吃飯的次數都多;所以很多程序員對寫SQL是深惡痛絕啊,但是回過頭來一想,程序在跟數據庫進行交互的時候,不就是靠的SQL來完成的嗎?如果連SQL都不寫了,那還怎么能更好的了解數據庫?怎么跟數據庫親切交流呢?后端工程師豈不是要失業了。



基于以上種種,MyBatis作為一個優秀、輕巧、靈活的持久層框架,既解決了我們和數據庫交互的繁瑣的代碼,同時也滿足了我們寫SQL的愿望(真正是因為我們自己寫SQL的可以優化SQL的執行效率),其中最大的一個特點,就是MyBatis的所提供的動態SQL,這也是它有別于其他ORM框架最大的一個特點,相信大家都使用過JDBC或其他類似框架的經驗,你應該能體會到根據不同條件拼接SQL語句有多么難受;經常會因為一個空格或者分號等,到時程序運營錯誤,動態SQL出現徹底的幫我們擺脫這一痛苦。



所以今天這篇文章,就來跟大家聊一聊MyBatis的動態SQL是怎么樣一回事兒,是怎么幫廣大程序猿節省出時間去陪女朋友的(哦哦哦...我有錯了,程序猿沒有女朋友...)

MyBatis給我們提供很多的動態SQL語句,這里我們就說幾種常用的動態SQL:

  • <if>

  • <choose>

  • <trim>

  • <foreach>

接下來咱么就分別來介紹下這幾種常用的動態SQL。


條件判斷語句

首先,我們先來說說標簽,這個標簽從字面意義上就可以很只管的看出來,它就是一個用來做判斷的語句,和Java中的if語句一樣,所以它的作用就是用來判斷我們拼接的SQL中的條件是否成立,接下來上代碼:

<select parameterType="int" resultType="test.User">
SELECT
*
FROM
t_user
WHERE 1=1
<if test="userId !=null and userId !=''">
and id = #{userId};
</if>
</select>

在這里我們就用來是判斷傳遞過來的參數userId是否為空的情況,這里大家可能注意到一個點,就是有個where 1=1 以及標簽里有個and,這是因為,如果我們在使用標簽的時候,傳遞過來的是多個條件,這就需要多個標簽了,所以通常情況下我們在每個標簽中的條件前面加一個and將它們拼接起來,因為我們不確定那個標簽里的條件是滿足的,隨意where后面第一滿足的條件前就多了一個and關鍵字,所以就通常情況下就會在where后面加上一個1=1恒成立的條件。

注:這里如果大家不使用 1=1的話,可以使用標簽,來替換where 1=1 這個等式,將條件寫在標簽里就可以了。


多條件判斷語句

翻譯一下就是選擇的意思,也就是他可以幫我么在多個條件中選擇一個成立的條件,它有點像 Java 中的 switch 語句,一個標簽中還需要另外兩個重要的標簽、 在后面解釋,還是先上代碼。

<select parameterType="int" resultType="test.User">
SELECT
*
FROM
t_user
<where>
<choose>
<when test="userId != null and userId != ''">
and id =#{userId}
</when>
<otherwise>
and id=3
</otherwise>
</choose>
</where>
</select>

這段代碼中,我們就直接改掉了標簽來代替where 1=1,這里解釋下。

  • 當test屬性的條件滿足時,是執行拼接其內的條件。

  • 所有條件都不滿足時,拼接其內的條件。


自定義元素標簽

看標簽的名字就能猜個八九不離十了,這個標簽可以自定義一些動態SQL的功能,怎么個定義法呢?咱們還是先來上代碼,一睹為快。

<select parameterType="int" resultType="test.User">
SELECT
*
FROM
t_user
<trim prefix="where" prefixOverrides="and | or">
<if test="userId !=null and userId !=''">
and id = #{userId};
</if>
</trim>
</select>

還記得我們在說標簽的時候,說到的標簽嗎,用它可以代替where 1=1的情況,現在我們學習了標簽的話,也可以用這種方式,標簽中有四個屬性。

  • prefix 前綴的意思,上圖中我們給的值是where意思就是會這個位置拼接上一個where關鍵字,當然也可以是別的關鍵字,如:set

  • prefixOverrides 前覆蓋的意思,上圖中它會把標簽中的and,關鍵字自動去掉,其他關鍵字就可以直接用|隔開。

  • suffix 后綴的意思,和前綴相反,可以在SQL末尾添加執行的后綴。

  • suffixOverrides 后綴覆蓋的意思,和前綴覆蓋相反,通常會把SQL最后無用的分號自動去掉。

以上就是標簽的用法,它是一個非常靈活的標簽,所以通常有些復雜的SQL的時候,就可以用它來處理。


循環標簽

這個標簽也很容易理解,就是循環的意思,和Java中的for循環類似,只不過他里面的屬性多些。

<insert>
insert into t_user (name,age) values
<foreach collection="userList" item="user" separator=",">
(#{user.username},#{user.age})
</foreach>
</insert>

元素的屬性主要有item、index、collection、open、separator、close

  • collection 表示如何來得到這個集合,如果傳入的直接為一個List,那么collection值就為list。
    如果直接傳入的為一個array不可變數組,那么collection值就為array,如果傳入的為一個Map,那么collection的值就為map的key。

  • item 表示集合中每一個元素進行迭代時的別名,比如item為value,那么,每次獲取的都使用#{value}即可。

  • index 指定一個名字,用于表示在迭代過程中,每次迭代到的位置,一般很少使用這個。

  • open 表示該語句以什么開始。

  • separator 表示在每次進行迭代之間以什么符號作為分隔符。

  • close 表示以什么結束。

標簽通常用在批量處理的數據的時候,通常是傳遞一些集合或者數組的參數,在拼接SQL的時候,就需要先從這些集合或數組總循環取出這些數據,比如:批量插入數據,批量刪除數據。

好了,到此就把MyBatis最重要也是最核心的一部分內容常用的動態SQL給大家介紹了一下,其中在說一些SQL的是,也會說下相關聯的動態SQL標簽,這部分知識必須要掌握哦。


標簽: mybatis
熱門班型時間
人工智能就業班 即將爆滿
AI應用線上班 即將爆滿
UI設計全能班 即將爆滿
數據分析綜合班 即將爆滿
軟件開發全能班 爆滿開班
網絡安全運營班 爆滿開班
報名優惠
免費試聽
課程資料
官方微信
返回頂部
培訓課程 熱門話題 站內鏈接
精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费
欧美狂野另类xxxxoooo| 国产精品毛片大码女人| 欧美日韩综合久久| 亚洲综合首页| 日韩一卡二卡三卡四卡| ●精品国产综合乱码久久久久 | 99久久精品免费看国产免费软件| 久久久久久国产精品一区| 91福利视频久久久久| 久久精子c满五个校花| 亚洲成人综合视频| 成人听书哪个软件好| 日本精品一区二区三区视频 | 久久av一区二区三区亚洲| 欧洲激情一区二区| 久久精品欧美日韩| 日韩成人av影视| av一区二区在线看| 色噜噜狠狠一区二区三区果冻| 2024国产精品视频| 天堂成人国产精品一区| gogo大胆日本视频一区| 亚洲国产精品123| 精品国产免费一区二区三区四区| 一区二区三区在线看| 东方欧美亚洲色图在线| 深田咏美在线x99av| 亚洲精品一区二区三区精华液| 亚洲成在人线在线播放| 91蜜桃网址入口| 91福利在线导航| 中文字幕亚洲在| 国产精品一区一区| 日本一区二区在线视频观看| 日韩美女一区二区三区四区| 亚洲成人动漫在线免费观看| 91免费看`日韩一区二区| 91福利在线播放| 最新成人av在线| 成人午夜短视频| 色偷偷88欧美精品久久久| 国产精品女主播av| 国产精品影视天天线| 亚洲午夜高清视频| 中文av一区二区| 国产精品主播直播| 亚洲精品不卡| 国产精品理伦片| 福利视频网站一区二区三区| 亚洲一区二区在线免费观看| 国产欧美久久久精品影院| 国内久久婷婷综合| 四虎永久在线精品免费一区二区| 久久久久国产免费免费| 亚洲黄一区二区三区| 972aa.com艺术欧美| 欧美日韩在线三级| 亚洲成人www| 5g国产欧美日韩视频| 欧美老肥妇做.爰bbww视频| 亚洲成人综合网站| 久久波多野结衣| 久久久五月婷婷| 国产精品白丝av| 在线看日本不卡| 亚洲一二三区视频在线观看| 国产女人水真多18毛片18精品| 日韩欧美中文字幕精品| 久久av中文字幕片| 亚洲精品影院| 一级做a爱片久久| 精品久久久久久一区| 久久精品一区二区三区av| 国产mv日韩mv欧美| 欧美色视频一区| 日韩成人午夜精品| 亚洲精品电影在线一区| 亚洲欧美日韩一区二区 | 久久久久青草大香线综合精品| 韩国一区二区三区| 日本精品一区二区三区高清| 一区二区欧美国产| 麻豆91蜜桃| 国产精品久久久久久久浪潮网站| 91丨九色丨蝌蚪丨老版| 日韩亚洲欧美综合| 国产剧情一区二区三区| 欧美日韩一区二区三区四区| 石原莉奈一区二区三区在线观看| 日本一区二区精品| 亚洲女性喷水在线观看一区| 国产日韩一区二区| 中文字幕国产精品一区二区| 999国产视频| 久久久久久久久久久电影| 成人开心网精品视频| 欧美一区二区三区播放老司机| 精品亚洲成av人在线观看| 在线免费亚洲电影| 蜜臀久久99精品久久久画质超高清| 亚洲精品成人自拍| 婷婷中文字幕综合| 一区二区日本| 日韩成人av影视| 在线中文字幕一区二区| 奇米色一区二区三区四区| 日本韩国一区二区三区| 日本不卡一区二区| 欧美在线一二三| 精品一区二区三区在线观看| 欧美日韩一区二区三区在线| 激情六月婷婷久久| 欧美久久免费观看| 粉嫩绯色av一区二区在线观看| 欧美一卡2卡三卡4卡5免费| 国产成人免费视频网站高清观看视频| 91精品国产一区二区| 成人永久看片免费视频天堂| 欧美tk丨vk视频| 91网站最新地址| 中国av一区二区三区| 国产一区二区在线观看免费播放| 亚洲婷婷在线视频| 日本一区二区三不卡| 婷婷中文字幕一区三区| 91精品福利视频| 国产原创一区二区三区| 日韩一区二区三区四区| 99热这里都是精品| 欧美激情一二三区| 免费试看一区| 香蕉影视欧美成人| 欧美三日本三级三级在线播放| 国产一区二区三区日韩| 日韩精品专区在线影院重磅| av一区和二区| 有码一区二区三区| 中文字幕中文字幕在线中一区高清 | 欧美激情论坛| 婷婷开心久久网| 欧美日产国产精品| 99在线精品一区二区三区| 国产精品美女久久久久久久网站| 欧美男人的天堂| 日韩在线一二三区| 欧美一级在线视频| 波多野结衣精品久久| 亚洲精品视频一区二区| 色天使色偷偷av一区二区| 国产激情一区二区三区桃花岛亚洲| 久久中文娱乐网| 欧美大香线蕉线伊人久久| 日韩高清欧美激情| 日韩一区二区视频| 国产丝袜不卡| 日韩国产精品久久| 日韩免费在线观看| 精品欧美一区二区精品久久| 三级亚洲高清视频| 日韩一区二区免费视频| 国产亚洲精品久久飘花| 天涯成人国产亚洲精品一区av| 在线成人av网站| 国产chinese精品一区二区| 亚洲国产一区二区a毛片| 欧美美女黄视频| 成人永久免费| 五月天激情综合网| 日韩美一区二区三区| 欧美不卡三区| 国产在线视频一区二区| 亚洲国产成人私人影院tom| 亚洲欧洲日韩综合二区| 丰满岳乱妇一区二区三区| 亚洲欧洲www| 欧美日韩卡一卡二| 国产精品久久7| 蜜桃视频免费观看一区| 久久久精品国产99久久精品芒果| 日本午夜精品一区二区| 丰满少妇在线播放bd日韩电影| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩一二区| 国产一区在线免费| 久久精品国产色蜜蜜麻豆| 国产视频视频一区| 91精彩视频在线| 风间由美久久久| 蜜臀精品一区二区三区在线观看 | 肥熟一91porny丨九色丨| 丝袜亚洲另类欧美综合| 久久中文娱乐网| 一区二区免费在线视频| 91麻豆高清视频| 日本不卡免费在线视频| 欧美激情一区二区三区在线| 欧美在线观看你懂的| 精品国产免费久久久久久尖叫 | 国产精品精品软件视频| 狠狠色综合色综合网络|