亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Mybatis學習筆記之動態SQL揭秘

2024-07-14 08:42:48
字體:
來源:轉載
供稿:網友

前言

MyBatis 的強大特性之一便是它的動態 SQL。所以今天小編在這里為大家介紹一下Mybatis的一個強大功能-動態SQL

動態SQL是Mybatis的一個強大的特性,在使用JDBC操作數據時,如果查詢條件特別多,將條件串聯成SQL字符串是一件非常痛苦的事情,通常的解決方法使寫很多的if-else條件語句去判斷和拼接,并確保不能忘了空格或在字段的最后省略逗號。Mybatis使用一種強大的動態SQL語言來改善這種情況

動態SQL基于OGNL的表達式,可使我們能方便地在SQL語句中實現某些邏輯,那么有哪些元素來支持這種功能呢?這就是下面我要說的了

  • if:利用if實現簡單的條件選擇
  • choose(when,otherwise):相當于java中的switch語句,通常與when和otherwise搭配
  • where:簡化SQL語句中where的條件判斷
  • set:解決動態更新語句
  • trim:可以靈活地去除多余的關鍵字
  • foreach:迭代一個集合,通常用于in條件

上面小編所說的這些元素,都是用于mapper.xml文件中的,并且它還是一個標簽,雙標簽。其實用法和咱們普通的編寫java用法差不多,接下來小編就來一一講解一下單個的元素都好說,來說說組合標簽

使用if+where實現多條件查詢

<select id="getUserList" resultType="User">select * from user<where><if test="username!=null and userName!=''">and userName like CONCAT('%',#{userName},'%')</if></where></select>

上述代碼就是一個最簡單的if+where的SQL映射語句,where元素標簽會自動識別其標簽內是否有返回值,若有,就插入一個where關鍵字,此外,若該標簽返回的內容是以and或者or開頭的,where元素會將其自動剔除,if元素標簽里主要的屬性就是test屬性,test后面跟的是一個表達式,返回true或者false,以此來進行判斷。

使用if+trim實現對條件查詢

<select id="getUserList" resultType="User">select * from user<trim prefix="where" prefixOverride="and|or"><if test="username!=null and userName!=''">and userName like CONCAT('%',#{userName},'%')</if></trim></select>

從上述代碼中可以看出trim和where元素標簽的用法差不多,就trim標簽中多了幾個元素,那多了啥元素呢?

  • prefix:前綴,作用是在trim包含的內容上加上前綴。
  • suffix:后綴,作用是在trim包含的內容上加上后綴。
  • prefixOverride:對于trim包含內容的首部進行指定內容(如此出的“and|or“)的忽略。
  • suffixOverride:對于trim包含內容的首尾部進行指定內容的忽略。

接下來再來看看使用動態SQL來實現更新操作

使用if+set實現更新操作

<update id="modify" parameterType="AppInfo">update app_info<set><if test="logoPicPath != null">logoPicPath=#{logoPicPath},</if><if test="logoLocPath != null">logoLocPath=#{logoLocPath},</if><if test="modifyBy != null">modifyBy=#{modifyBy},</if><if test="modifyDate != null">modifyDate=#{modifyDate},</if></set>where id=#{id}</update>

上述代碼就是一個最簡單的if+set的動態SQL,從上面的代碼中能看出其所做的更新操作是動態的,意思就是說你這個值為不為空,不為空就給你更新,要是為空就不管它,emmmm,看樣子它的設計還是很人性化的。

上面的操作也是可以用trim來實現的

if+trim實現更新操作

<update id="modify" parameterType="AppInfo">update app_info<trim prefix="set" suffixOverride="," suffix="where id=#{id}"><if test="logoPicPath != null">logoPicPath=#{logoPicPath},</if><if test="logoLocPath != null">logoLocPath=#{logoLocPath},</if><if test="modifyBy != null">modifyBy=#{modifyBy},</if><if test="modifyDate != null">modifyDate=#{modifyDate},</if></trim></update>

小編之前已經介紹過trim的用法了,在這里就不再贅述了,認真的童鞋應該都明白了。

接下來就是使用foreach完成復雜查詢,先說說Mybatis入參為數組的foreach迭代

小編先帶大家了解一下foreach的基本用法和屬性,foreach主要用于在構建in條件中,它可以在SQL語句中迭代一個集合。它的屬性主要有:item、index、collection、separator、close、open,下面我們來看代碼

<select id="getUserByRole_foreach_array" resultMap="userMapByRole">select * from user_info where userRole in<foreach collection="array" item="roleIds" open="("separator","close=")">#{roleIds}</foreach></select><resultMap tye="User" id="userMapByRole"><id property="id" clumn="id"/><result property="userCode" column="userCode/><result property="userName" column="userName/></resultMap>

對于SQL條件循環(in語句),需要使用foreach標簽,那小編就用上述代碼來向大家介紹一下foreach的基本屬性

Item:表示集合中每一個元素進行迭代的別名(如此處的roleIds)。

index:指定一個名稱,用于表示在迭代過程中,每次迭代到的位置。

open:表示該語句以什么開始(既然是in條件語句,所以必然是以“(”開始)

separator:表示在每次進行迭代之間以什么符號作為分隔符(既然是in條件語句,所以必然以“,作為分隔符)。

close:表示該語句以什么結束(既然是in條件語句,所以必然是以“)”結束)。

collection:最關鍵并最容易出錯的屬性,需格外注意,該屬性必須指定,不同情況下,該屬性的值是不一樣的。主要有三種情況

  • 若入參為單參數且參數類型是一個list的時候,collection屬性值為list。
  • 若入參為單參數且參數類型是一個數組的時候,collection屬性值為array(此處傳入參數Integer[] roleIds為數組類型,故此處collection屬性值設為“array”)。
  • 若傳入參數為多參數,就需要把它們封裝為一個Map進行處理。

以上就是動態SQL的基本語法和元素了,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品va在线观看| 亚洲人成免费电影| 欧美激情一级欧美精品| 欧美精品激情在线观看| 7m精品福利视频导航| 日韩欧美视频一区二区三区| 欧洲午夜精品久久久| 国产精品嫩草影院久久久| 欧美亚洲另类在线| 欧美午夜激情在线| 亚洲图中文字幕| 欧美最猛性xxxxx(亚洲精品)| 国产亚洲精品美女久久久久| 日韩在线播放一区| 国产日韩在线看| 91久久国产综合久久91精品网站| 亚洲第一综合天堂另类专| 午夜精品久久久99热福利| 欧美午夜视频在线观看| 久久6精品影院| 欧美成人性生活| 国产激情久久久久| 久久久久中文字幕2018| 97色在线观看| 国产日韩在线视频| 在线免费观看羞羞视频一区二区| 国产精品视频久久久久| 欧美中文字幕第一页| 国产精品美乳一区二区免费| 欧美激情第6页| 91精品国产高清自在线看超| 一区二区三区日韩在线| 久久免费视频在线观看| 亚洲欧洲高清在线| 自拍亚洲一区欧美另类| 久久福利视频导航| 国产精品福利网| 亚洲国产精品va在线看黑人| 欧美成人精品激情在线观看| 久久久视频免费观看| 久久99热这里只有精品国产| 国内精品伊人久久| 亚洲xxx自由成熟| 欧美另类69精品久久久久9999| 日韩成人高清在线| 一本久久综合亚洲鲁鲁| 亚洲999一在线观看www| 欧美性视频网站| 日韩在线欧美在线国产在线| 日韩欧美在线视频| 欧美在线激情网| 久久影院中文字幕| 夜夜嗨av一区二区三区免费区| 美女啪啪无遮挡免费久久网站| 欧美在线视频网| 国产精品一区二区在线| 亚洲va欧美va国产综合久久| 国产成人综合久久| 国产主播欧美精品| 欧美香蕉大胸在线视频观看| 全球成人中文在线| 亚洲伦理中文字幕| 97视频人免费观看| 亚洲电影在线看| 性欧美长视频免费观看不卡| 久久久久久尹人网香蕉| 国产精品久久久久久久久久久不卡| 青青久久av北条麻妃海外网| 国产欧美一区二区三区视频| 欧美激情综合亚洲一二区| 欧美成人在线免费视频| 国产成人精品日本亚洲| 亚洲最大中文字幕| 国产亚洲免费的视频看| 98精品国产自产在线观看| 亚洲最大成人网色| 永久免费看mv网站入口亚洲| 欧美黑人视频一区| 日韩在线观看免费av| 在线视频欧美性高潮| 免费91麻豆精品国产自产在线观看| 美日韩精品免费视频| 国产免费观看久久黄| 欧美二区在线播放| 成人福利网站在线观看| 亚洲综合小说区| 日韩精品视频在线观看免费| 国产一区二区视频在线观看| 国产在线不卡精品| 亚洲欧美国产一本综合首页| 久久久亚洲福利精品午夜| 色中色综合影院手机版在线观看| 在线免费观看羞羞视频一区二区| 久久在线视频在线| 国产做受69高潮| 久久天天躁狠狠躁夜夜av| 国产精品视频精品| 亚洲第一偷拍网| 国产精品稀缺呦系列在线| 亚洲精品永久免费精品| 国产精品成人观看视频国产奇米| 欧美精品久久久久a| 国产精品视频地址| 在线国产精品视频| 欧美大片欧美激情性色a∨久久| 亚洲欧洲在线观看| 在线播放日韩精品| 91精品视频在线播放| 中文字幕综合一区| 中文字幕日韩视频| 高清一区二区三区四区五区| 亚洲成人av中文字幕| 国产精品视频男人的天堂| 136fldh精品导航福利| 91九色视频导航| 国产日韩欧美夫妻视频在线观看| 国产在线视频2019最新视频| 久久精品一偷一偷国产| 亚洲男人天堂网| 黑人极品videos精品欧美裸| 91久久久国产精品| 最近2019年中文视频免费在线观看| 亚洲一区国产精品| 亚洲国产精品久久久久秋霞不卡| 亚洲一区二区三区四区视频| 久久久久久国产| 清纯唯美日韩制服另类| 欧美极品欧美精品欧美视频| 欧美性精品220| 日韩欧美中文在线| 欧美老少配视频| 国产亚洲精品va在线观看| 久久免费少妇高潮久久精品99| 国产成人精品在线观看| 国产精品美女主播| 成人免费在线视频网站| 91精品久久久久久综合乱菊| 91高清视频免费| 亚洲成av人乱码色午夜| 亚洲色图激情小说| 欧美日韩999| 亚洲精品视频中文字幕| 久精品免费视频| 欧美乱大交xxxxx另类电影| 91深夜福利视频| 亚洲欧洲第一视频| 狠狠爱在线视频一区| 97在线看免费观看视频在线观看| 日韩成人在线电影网| 成人福利在线视频| 日韩中文字幕在线| 欧美国产日产韩国视频| 欧美日韩在线影院| 伊人久久久久久久久久久| 日韩性xxxx爱| 亚洲免费小视频| 国产经典一区二区| 亚洲精品免费一区二区三区| 国内精品400部情侣激情| 色偷偷888欧美精品久久久| 久久福利视频网| 九九久久精品一区| 亚洲精品丝袜日韩| 国产视频久久久久久久|