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

主頁 > 知識庫 > Mybatis中的動態SQL語句解析

Mybatis中的動態SQL語句解析

熱門標簽:常州網絡外呼系統開發 巫師三血與酒地圖標注 走過哪個省地圖標注 外呼系統電銷受騙 萊西市地圖標注 400電話申請信用卡 在哪里申請400電話 銷售語音電話機器人 安徽ai電話電銷機器人有效果嗎

這篇文章主要介紹了Mybatis中的動態SQL語句解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

  Mybatis中配置SQL有兩種方式,一種是利用xml 方式進行配置,一種是利用注解進行配置。

  Mybatis使用注解配置SQL,但是由于配置功能受限,而且對于復雜的SQL而言可讀性很差,所以很少使用。

  Mybatis常用xml配置的方式,使用xml的幾個簡單的元素,便能完成動態SQL的功能,大量的判斷都可以在mybaties的映射xml里面配置,以達到許多需要大量代碼才能實現的功能,大大減少了代碼量,體現了Mybatis的靈活、高度可配置性和維護性。

                  元素                          作用                 備注
if 判斷語句 單條件分支判斷
choose(when,otherwise) 相當于Java中的switch和case語句 多條件分支判斷
trim 輔助元素,用于處理特定的SQL拼裝問題 用于處理SQL拼裝的問題
foreach 循環語句 在in語句等列表條件常用

if元素

  if元素是最常用的判斷語句,相當于Java中國的 if 語句,它常常與test屬性聯合使用。

select id="findRole1" parameterType="string" resultMap="roleResultMap">
    select role_no, role_name, note from t_role where 1=1
    if test="roleName != null and roleName !=''">
      and role_name like concat('%', #{roleName}, '%')
    /if>
  /select>

  當參數roleName傳遞進映射器時,如果參數不為空,則采取構造對 roleName 的模糊查詢,否則就不要去構造這個條件。通過Mybaties的 if 元素節省了許多拼接SQL的工作,集中在 xml 里面維護。

choose、when、otherwise元素

  如果在判斷時有更多的選擇,不只是兩種選擇,也就是類似switch...case...default...功能的語句。在映射的SQL語句中,使用choose、when、otherwise元素承擔這個功能。

select id="findRole2" parameterType="role" resultMap="roleResultMap">
    select role_no, role_name, note from t_role
    where 1=1
    choose>
      when test="roleNo != null and roleNo !=''">
        AND role_no = #{roleNo}
      /when>
      when test="roleName != null and roleName !=''">
        AND role_name like concat('%', #{roleName}, '%')
      /when>
      otherwise>
        AND note is not null
      /otherwise>
    /choose>
  /select>

  上述的場景就是:

  首先,如果角色編號不為空,則只用角色編號作為條件查詢。

  當角色編號為空,而角色名稱不為空,則使用角色名稱作為條件進行模糊查詢。

  當角色編號和角色編號都為空,則要求角色備注不為空。

trim、where、set元素

  在前面的SQL語句中加入了“1=1”,這樣可以實現其功能,但是有一個更好的實現,那就是使用where。當where元素里面的條件成立時,才會加入where這個SQL關鍵字到組裝的SQL里面,否則不會加入。

select id="findRole3" parameterType="role" resultMap="roleResultMap">
    select role_no, role_name, note from t_role
    where>
      if test="roleName != null and roleName !=''">
        and role_name like concat('%', #{roleName}, '%')
      /if>
      if test="note != null and note !=''">
        and note like concat('%', #{note}, '%')
      /if>
    /where>
  /select>

  有時需要去掉一些特殊的SQL語法,比如常見的and、or等。使用trim元素也可以達到預期效果。其中prefix代表的語句的前綴,prefixOverrides代表的是需要去掉哪種字符串。與前面的where語句是等效的。

select id="findRole4" parameterType="string" resultMap="roleResultMap">
    select role_no, role_name, note from t_role
    trim prefix="where" prefixOverrides="and">
      if test="roleName != null and roleName !=''">
        and role_name like concat('%', #{roleName}, '%')
      /if>
    /trim>
  /select>

  在hibernate中如果因為更新某一個字段而不得已發送所有的字段給持久化對象,這樣影響了SQL語句的執行效率。最佳的方法是把主鍵和更新字段的值傳遞給SQL去更新。set元素就可以實現此功能。set元素遇到逗號,它會自動將對應的逗號去掉。

update id="updateRole" parameterType="role">
    update t_role
    set>
      if test="roleName != null and roleName !=''">
        role_name = #{roleName},
      /if>
      if test="note != null and note != ''">
        note = #{note}
      /if>
    /set>
    where role_no = #{roleNo}
  /update>

foreach元素

  foreach元素是一個循環語句,它的作用是遍歷集合,它能很好的支持數組和List、Set接口的集合,對此提供遍歷的功能,它往往用于SQL中的in關鍵字。

select id="findRoleByNums" resultMap="roleResultMap">
    select role_no, role_name, note from t_role where role_no in
    foreach item="roleNo" index="index" collection="roleNoList"
      open="(" separator="," close=")">
      #{roleNo}
    /foreach>
  /select>

  collection配置的roleNoList是傳遞進來的參數名稱,它可以是一個數組、List、Set等集合。

  item配置的是循環中當前的元素。

  index配置的是當前元素在集合的位置下標。

  open和close配置的是以什么符號將這些集合元素包裝起來。

  separator是各個元素的分隔符。

用test的屬性判斷字符串

  test用于條件判斷語句,其作用相當于判斷真假,在大多數場景下,主要用于判斷空和非空的。

  select id="getRoleTest" parameterType="string" resultMap="roleResultMap">
    select role_no, role_name, note from t_role
    if test="type == 'Y'.toString()">
      where 1=1
    /if>
  /select>

  如果把 type='Y'傳遞給SQL,就可以實現Mybatis加入了條件 where 1=1,所以對于字符串的判斷,可以加入 toString ()的方法進行比較。

bind元素

  bind元素的作用是通過OGNL表達式去定義一個上下文變量,這樣更方便使用。

  例如在模糊查詢時,如果是MySQL數據庫,常常用到一個concat,它用 % 和 參數相連。然而在Oracle數據庫中則沒有,Oracle數據庫用連接符號是 “||”,這樣SQL就需要兩種形式去實現,用bind元素,就不用使用數據庫語言。

  select id="findRole5" parameterType="string" resultMap="roleResultMap">
    bind name="pattern" value="'%' + _parameter + '%'" />
    SELECT role_no, role_name, note FROM t_role
    where role_name like #{pattern}
  /select>

  以上就是我在學習過程中對于Mybatis中的動態SQL語句的常見知識點總結,希望大家可以一起學習進步!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 在Mybatis @Select注解中實現拼寫動態sql
  • Mybatis 動態SQL的幾種實現方法
  • MyBatis動態Sql之if標簽的用法詳解
  • mybatis動態sql之Map參數的講解
  • Mybatis模糊查詢和動態sql語句的用法
  • Mybatis下動態sql中##和$$的區別講解
  • MyBatis執行動態SQL的方法
  • mybatis動態sql實現邏輯代碼詳解

標簽:赤峰 煙臺 果洛 鞍山 黃石 來賓 陽江 河北

巨人網絡通訊聲明:本文標題《Mybatis中的動態SQL語句解析》,本文關鍵詞  Mybatis,中的,動態,SQL,語句,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mybatis中的動態SQL語句解析》相關的同類信息!
  • 本頁收集關于Mybatis中的動態SQL語句解析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    制服丝袜中文字幕亚洲| 中文字幕视频一区| 老司机午夜精品| 一区二区高清在线| 中文字幕中文字幕一区| 亚洲自拍偷拍图区| 日韩午夜激情免费电影| 天天做天天摸天天爽国产一区| 国产精品久久久久天堂| 亚洲欧洲一区二区在线播放| 中文字幕不卡的av| 亚洲午夜日本在线观看| 精品无码三级在线观看视频| 99久久久久久| 精品久久久久久久久久久院品网| 久久久久久久久99精品| 亚洲综合无码一区二区| 精品一二三四区| 色素色在线综合| 久久五月婷婷丁香社区| 国产精品久久久久久久久快鸭| 尤物视频一区二区| 国产精品1区2区3区在线观看| 国产精品美女一区二区在线观看| 国产成人精品三级| 久久久久高清精品| 国产91在线观看丝袜| 中文字幕高清一区| 4438成人网| 青青草97国产精品免费观看无弹窗版| 久久久综合视频| 色国产综合视频| 亚洲国产欧美日韩另类综合| 91亚洲精品久久久蜜桃网站| 欧美日韩一级视频| 日韩国产在线一| 亚洲欧洲国产专区| 日韩美一区二区三区| 欧美日韩一区成人| 91丨porny丨户外露出| 国产成人免费网站| 欧美日韩成人综合天天影院| 日韩欧美久久一区| 亚洲欧洲综合另类| 国产精品一区二区三区四区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产99久久久国产精品| 欧美日韩精品一区二区三区四区| 亚洲精品欧美专区| 欧美亚洲国产一区二区三区| 色视频一区二区| 精品免费国产二区三区| 日韩一区二区精品| 国产三级一区二区三区| 中文字幕中文在线不卡住| 午夜成人在线视频| 国产精品一区二区三区乱码| 欧美日本免费一区二区三区| 精品粉嫩超白一线天av| 亚洲国产精品久久人人爱蜜臀| 国产精品77777| 久久网这里都是精品| 亚洲国产精品久久不卡毛片 | 一区二区在线观看免费视频播放 | 国产精品不卡一区二区三区| 99久久er热在这里只有精品66| 亚洲一区免费观看| 欧美一区二区三区成人| 国产精品伊人色| 日韩中文字幕区一区有砖一区| 精品区一区二区| 国产一区二区三区在线观看免费视频| 国产精品色噜噜| 欧美视频日韩视频| 国产乱理伦片在线观看夜一区 | 久久精品免费观看| 国产清纯白嫩初高生在线观看91| 97成人超碰视| 精品一区二区久久久| 亚洲一区二区在线观看视频| 国产欧美一区二区精品仙草咪| 在线精品视频一区二区| www.色精品| 99热这里都是精品| 国产精品一二三| 韩国av一区二区三区| 天天爽夜夜爽夜夜爽精品视频| 国产精品污www在线观看| 久久女同互慰一区二区三区| 欧美一区二区视频在线观看2020| 欧美色精品在线视频| 欧美老人xxxx18| 欧美视频一区二| 在线不卡中文字幕播放| 制服丝袜亚洲色图| 欧美精品一区二区三区四区 | 国模冰冰炮一区二区| 视频一区视频二区中文字幕| 强制捆绑调教一区二区| 午夜精品国产更新| 亚洲一区二区免费视频| 亚洲图片激情小说| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区啦啦啦在线观看| 国产精品资源在线| 国产91精品一区二区麻豆亚洲| 国产精品99久久久久久久女警 | 高清久久久久久| 成人福利视频在线| 美国十次了思思久久精品导航| 亚洲国产日韩a在线播放| 亚洲成人av一区| 日韩国产在线一| 亚洲在线免费播放| 玖玖九九国产精品| 色久优优欧美色久优优| 91丨九色丨黑人外教| 国产白丝精品91爽爽久久| 成人精品免费看| 91精品国产91久久综合桃花| 精品国产免费人成电影在线观看四季| 欧美精品 日韩| 成人欧美一区二区三区黑人麻豆| 国产精品久久久久久久午夜片 | 天堂蜜桃91精品| 国产麻豆91精品| 欧美日韩不卡在线| 亚洲人123区| 国产经典欧美精品| 欧美成人综合网站| 亚洲 欧美综合在线网络| 成人一区二区视频| 精品动漫一区二区三区在线观看| 亚洲自拍偷拍综合| 色天使色偷偷av一区二区| 日本一区二区三区在线不卡| 精品一区二区三区免费播放| 91精品国产免费| 九色综合国产一区二区三区| 欧美蜜桃一区二区三区| 久久国产精品色| 久久夜色精品国产噜噜av| 国产夫妻精品视频| 亚洲人精品一区| 欧美一区二区久久| 高清shemale亚洲人妖| 亚洲电影一区二区三区| 欧美成人r级一区二区三区| 国精品**一区二区三区在线蜜桃| 精品国产一区二区国模嫣然| 色综合久久88色综合天天| 免费观看久久久4p| 一区二区三区欧美| 欧美精品18+| 国产一区视频在线看| 日韩三级高清在线| 一区视频在线播放| 99国产欧美久久久精品| 国产喷白浆一区二区三区| 成人黄色777网| 91精品一区二区三区久久久久久| 亚洲国产日韩精品| 成人app下载| 视频一区欧美精品| 欧美不卡一区二区三区四区| 国产一区二区三区免费| 精品少妇一区二区三区在线视频| 国产精品一二二区| 亚洲美女淫视频| 久久久久久影视| 在线亚洲一区观看| 97久久精品人人澡人人爽| 视频一区欧美精品| 玉米视频成人免费看| 最新国产成人在线观看| 亚洲精品在线观看网站| 91精品欧美福利在线观看| 91免费观看视频| 成人国产精品视频| 不卡区在线中文字幕| 国产馆精品极品| 狠狠久久亚洲欧美| 久久国产精品99久久人人澡| 久99久精品视频免费观看| 蜜臀精品一区二区三区在线观看 | 成人免费观看av| 在线观看免费亚洲| 51精品国自产在线| 中文字幕免费不卡| 国产乱码精品一品二品| 欧美日韩一区二区三区不卡| 777色狠狠一区二区三区| 欧美日韩一区二区三区在线看 | 午夜亚洲福利老司机| 日本成人在线电影网| 日韩福利电影在线| 加勒比av一区二区| 成人黄色一级视频| 欧美一级一区二区| 日韩欧美亚洲国产精品字幕久久久|