婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mybatis動態sql常用場景總結

mybatis動態sql常用場景總結

熱門標簽:武漢AI電銷機器人 萬利達綜合醫院地圖標注點 實體店地圖標注怎么標 南京電銷外呼系統哪家好 外呼系統會封嗎 電銷機器人 深圳 股票配資電銷機器人 在電子版地圖標注要收費嗎 地圖標注如何弄全套標

前言

平時在開發中,針對動態sql這塊目前是薄弱點,自己根據官網在對應項目邊測試邊寫博客,此篇只是為了加深動態sql的熟練度,有不到之處敬請批評指正!

1.if

使用動態 SQL 最常見情景是根據條件包含 where 子句的一部分。比如:

select id="findActiveBlogWithTitleLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE state = ‘ACTIVE'
  if test="title != null">
    AND title like #{title}
  /if>
/select>

這條語句提供了可選的查找文本功能。如果不傳入 “title”,那么所有處于 “ACTIVE” 狀態的 BLOG 都會返回;如果傳入了 “title” 參數,那么就會對 “title”
一列進行模糊查找并返回對應的 BLOG 結果(細心的讀者可能會發現,“title” 的參數值需要包含查找掩碼或通配符字符)。
如果希望通過 “title” 和 “author” 兩個參數進行可選搜索該怎么辦呢?首先,我想先將語句名稱修改成更名副其實的名稱;接下來,只需要加入另一個條件即可。

select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE'
  if test="title != null">
    AND title like #{title}
  /if>
  if test="author != null and author.name != null">
    AND author_name like #{author.name}
  /if>
/select>

2. choose、when、otherwise

有時候,我們不想使用所有的條件,而只是想從多個條件中選擇一個使用。針對這種情況,MyBatis 提供了 choose 元素,它有點像 Java 中的 switch 語句。
還是上面的例子,但是策略變為:傳入了 “title” 就按 “title” 查找,傳入了 “author” 就按 “author” 查找的情形。若兩者都沒有傳入,
就返回標記為 featured 的 BLOG(這可能是管理員認為,與其返回大量的無意義隨機 Blog,還不如返回一些由管理員精選的 Blog)。

select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE'
  choose>
    when test="title != null">
      AND title like #{title}
    /when>
    when test="author != null and author.name != null">
      AND author_name like #{author.name}
    /when>
    otherwise>
      AND featured = 1
    /otherwise>
  /choose>
/select>

3. trim、where、set

前面幾個例子已經方便地解決了一個臭名昭著的動態 SQL 問題。現在回到之前的 “if” 示例,這次我們將 “state = ‘ACTIVE'” 設置成動態條件,看看會發生什么。

select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE
  if test="state != null">
    state = #{state}
  /if>
  if test="title != null">
    AND title like #{title}
  /if>
  if test="author != null and author.name != null">
    AND author_name like #{author.name}
  /if>
/select>

如果沒有匹配的條件會怎么樣?最終這條 SQL 會變成這樣:

SELECT * FROM BLOG
WHERE

這會導致查詢失敗。如果匹配的只是第二個條件又會怎樣?這條 SQL 會是這樣:

SELECT * FROM BLOG
WHERE
AND title like ‘someTitle'

這個查詢也會失敗。這個問題不能簡單地用條件元素來解決。這個問題是如此的難以解決,以至于解決過的人不會再想碰到這種問題。
MyBatis 有一個簡單且適合大多數場景的解決辦法。而在其他場景中,可以對其進行自定義以符合需求。而這,只需要一處簡單的改動:

select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  where>
    if test="state != null">
         state = #{state}
    /if>
    if test="title != null">
        AND title like #{title}
    /if>
    if test="author != null and author.name != null">
        AND author_name like #{author.name}
    /if>
  /where>
/select>

where 元素只會在子元素返回任何內容的情況下才插入 “WHERE” 子句。而且,若子句的開頭為 “AND” 或 “OR”,where 元素也會將它們去除。
如果 where 元素與你期望的不太一樣,你也可以通過自定義 trim 元素來定制 where 元素的功能。比如,和 where 元素等價的自定義 trim 元素為:

trim prefix="WHERE" prefixOverrides="AND |OR ">
  ...
/trim>

prefixOverrides 屬性會忽略通過管道符分隔的文本序列(注意此例中的空格是必要的)。上述例子會移除所有 prefixOverrides 屬性中指定的內容,并且插入 prefix 屬性中指定的內容。
用于動態更新語句的類似解決方案叫做 set。set 元素可以用于動態包含需要更新的列,忽略其它不更新的列。比如:

update id="updateAuthorIfNecessary">
  update Author
    set>
      if test="username != null">username=#{username},/if>
      if test="password != null">password=#{password},/if>
      if test="email != null">email=#{email},/if>
      if test="bio != null">bio=#{bio}/if>
    /set>
  where id=#{id}
/update>

這個例子中,set 元素會動態地在行首插入 SET 關鍵字,并會刪掉額外的逗號(這些逗號是在使用條件語句給列賦值時引入的)。
來看看與 set 元素等價的自定義 trim 元素吧:

trim prefix="SET" suffixOverrides=",">
  ...
/trim>

注意,我們覆蓋了后綴值設置,并且自定義了前綴值。

4. foreach

動態 SQL 的另一個常見使用場景是對集合進行遍歷(尤其是在構建 IN 條件語句的時候)。比如:

select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
  foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  /foreach>
/select>

foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及集合項迭代之間的分隔符。
這個元素也不會錯誤地添加多余的分隔符,看它多智能!
提示 你可以將任何可迭代對象(如 List、Set 等)、Map 對象或者數組對象作為集合參數傳遞給 foreach。當使用可迭代對象或者數組時,index 是當前迭代的序號,
item 的值是本次迭代獲取到的元素。當使用 Map 對象(或者 Map.Entry 對象的集合)時,index 是鍵,item 是值。
至此,我們已經完成了與 XML 配置及映射文件相關的討論。下一章將詳細探討 Java API,以便你能充分利用已經創建的映射配置。

到此這篇關于mybatis動態sql總結的文章就介紹到這了,更多相關mybatis動態sql內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • IDEA下創建SpringBoot+MyBatis+MySql項目實現動態登錄與注冊功能
  • mybatis的動態sql之if test的使用說明
  • 在Mybatis @Select注解中實現拼寫動態sql
  • Mybatis中的動態SQL語句解析
  • MyBatis動態Sql之if標簽的用法詳解
  • mybatis動態sql之Map參數的講解
  • Mybatis下動態sql中##和$$的區別講解
  • MyBatis執行動態SQL的方法

標簽:廣東 臺州 汕頭 濟源 安徽 泰安 濟寧 武威

巨人網絡通訊聲明:本文標題《mybatis動態sql常用場景總結》,本文關鍵詞  mybatis,動態,sql,常用,場景,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mybatis動態sql常用場景總結》相關的同類信息!
  • 本頁收集關于mybatis動態sql常用場景總結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    五月天亚洲婷婷| 日韩情涩欧美日韩视频| 久久噜噜亚洲综合| 欧美视频三区在线播放| 蜜桃av一区二区| 亚洲免费观看高清完整版在线观看熊| 欧美日韩一区 二区 三区 久久精品| 麻豆精品视频在线观看免费| 自拍偷拍亚洲激情| 久久蜜臀精品av| 欧美一区二区私人影院日本| 欧美色大人视频| 色综合视频在线观看| 国产一区二区三区四区五区入口| 亚洲乱码一区二区三区在线观看| 在线不卡中文字幕| 欧美性色黄大片| 久久精品国内一区二区三区| 一区二区三区在线视频观看 | 精品一区二区三区久久| 亚洲最大成人综合| 亚洲国产美女搞黄色| 一区二区三区视频在线看| 亚洲婷婷国产精品电影人久久| 日本一区二区三区电影| 国产免费久久精品| 亚洲国产精华液网站w| 国产婷婷一区二区| 国产欧美一区在线| 最好看的中文字幕久久| 最近中文字幕一区二区三区| 一区二区三区日韩| 性久久久久久久| 日本三级亚洲精品| 久久 天天综合| 国产一区二区三区在线观看免费视频| 国产免费观看久久| 亚洲三级视频在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲私人黄色宅男| 性做久久久久久| 精品亚洲aⅴ乱码一区二区三区| 国产综合久久久久久久久久久久| 国产乱一区二区| 色天使色偷偷av一区二区| 欧美三级电影网站| 久久综合久久鬼色| 成人综合在线网站| 在线观看视频一区二区| 欧美日韩色综合| 久久亚洲免费视频| 亚洲激情综合网| 精品在线播放午夜| 成人免费毛片app| 欧美专区日韩专区| 久久久久久久免费视频了| 亚洲男人的天堂av| 久久黄色级2电影| 色婷婷综合久久久中文一区二区 | 亚洲成精国产精品女| 午夜精品爽啪视频| 福利电影一区二区| 欧美日韩精品一区二区三区四区| 久久久午夜精品理论片中文字幕| 1024成人网色www| 国内国产精品久久| 在线观看一区不卡| 精品国产污网站| 亚洲自拍另类综合| 成人网在线播放| 91精选在线观看| 国产欧美一区二区精品仙草咪| 亚洲一区在线观看网站| 大陆成人av片| 精品国产一区二区精华| 亚洲综合在线免费观看| 国产成人亚洲综合a∨婷婷| 91麻豆精品91久久久久同性| 亚洲精品少妇30p| 成人自拍视频在线| 久久日韩粉嫩一区二区三区| 首页国产丝袜综合| 91麻豆.com| 中文字幕在线观看不卡视频| 极品销魂美女一区二区三区| 5566中文字幕一区二区电影| 亚洲免费三区一区二区| 成人精品高清在线| 久久久高清一区二区三区| 久久精品国产一区二区| 国产精品国产自产拍高清av| 九色porny丨国产精品| 欧美日韩国产一二三| 亚洲精品少妇30p| 91麻豆高清视频| 亚洲欧美电影一区二区| 99久久婷婷国产综合精品| 国产精品每日更新| 成人免费观看视频| 国产精品二三区| 91丨国产丨九色丨pron| 亚洲欧洲制服丝袜| 在线观看国产日韩| 亚洲国产日韩一区二区| 欧美乱妇15p| 日韩黄色免费网站| 欧美不卡激情三级在线观看| 美女国产一区二区三区| 久久免费的精品国产v∧| 国产成人综合亚洲91猫咪| 久久婷婷久久一区二区三区| 国产精品18久久久| 综合欧美一区二区三区| 色综合久久综合| 亚洲一区二区四区蜜桃| 91.com视频| 国内精品视频666| 中文文精品字幕一区二区| 国产91丝袜在线18| 有码一区二区三区| 欧美一级二级三级蜜桃| 国产伦精品一区二区三区免费迷| 国产人伦精品一区二区| 久久先锋影音av| 91成人免费在线视频| 中文字幕乱码久久午夜不卡 | 精品无人区卡一卡二卡三乱码免费卡| 91精品免费观看| 国产盗摄精品一区二区三区在线 | 中文字幕在线观看一区| 欧美日韩精品免费观看视频| 韩国av一区二区三区| 国产精品久久久久久久久动漫| 91香蕉视频mp4| 毛片一区二区三区| 亚洲国产成人自拍| 欧美一区二区三区免费视频| 国产精品传媒视频| 在线视频国内自拍亚洲视频| 五月激情综合色| 国产亚洲一区字幕| 日韩一级片网址| 91视频观看免费| 国产一区二区主播在线| 亚洲在线视频网站| 国产欧美一区二区精品久导航 | 欧美xxxxxxxxx| 91麻豆6部合集magnet| 国产一区二区伦理片| 亚洲国产精品久久久男人的天堂| 国产精品系列在线| 日韩欧美一卡二卡| 欧美久久久久久久久中文字幕| 97aⅴ精品视频一二三区| 狠狠色综合播放一区二区| 亚洲在线中文字幕| 亚洲欧美影音先锋| 久久久91精品国产一区二区三区| 欧美日韩一区二区在线视频| www.欧美色图| 国产精品嫩草99a| 97精品视频在线观看自产线路二| 亚洲一区二区视频在线观看| 欧美白人最猛性xxxxx69交| 91蜜桃免费观看视频| 国模娜娜一区二区三区| 国产乱子伦一区二区三区国色天香 | 日韩高清电影一区| 国产日韩欧美不卡在线| 欧美一区二区日韩一区二区| 国产91丝袜在线18| 国产成人免费视频网站| 韩国在线一区二区| 捆绑变态av一区二区三区| 亚洲一二三区在线观看| 国产午夜精品一区二区三区嫩草| 欧美一级高清大全免费观看| 91视视频在线观看入口直接观看www | 蜜臂av日日欢夜夜爽一区| 欧美区视频在线观看| 丝袜美腿亚洲一区二区图片| 中文字幕欧美日韩一区| 日韩一二三四区| 在线精品国精品国产尤物884a| 国产成a人亚洲| 久久99久久99精品免视看婷婷| 亚洲精品自拍动漫在线| 国产精品久久久久久久久免费桃花 | 福利电影一区二区三区| 亚洲精品午夜久久久| 亚洲一区二区免费视频| 一区二区三区成人| 日韩毛片视频在线看| 亚洲老妇xxxxxx| 最近中文字幕一区二区三区| 一区二区三区免费网站| 亚洲欧洲综合另类在线| 日韩专区一卡二卡| 国产原创一区二区三区| 国产一区二区三区香蕉|