精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

mybatis 動態(tài)sql

數(shù)據(jù)庫 Oracle
OGNL,全稱為Object-Graph Navigation Language,它是一個功能強大的表達式語言,用來獲取和設置Java對象的屬性,它旨在提供一個更高的更抽象的層次來對Java對象圖進行導航。

   名詞解析

  OGNL表達式

  OGNL,全稱為Object-Graph Navigation Language,它是一個功能強大的表達式語言,用來獲取和設置Java對象的屬性,它旨在提供一個更高的更抽象的層次來對Java對象圖進行導航。

  OGNL表達式的基本單位是"導航鏈",一般導航鏈由如下幾個部分組成:

  屬性名稱(property)

  方法調(diào)用(method invoke)

  數(shù)組元素

  所有的OGNL表達式都基于當前對象的上下文來完成求值運算,鏈的前面部分的結果將作為后面求值的上下文。例如:names[0].length()。

  mybatis 的動態(tài)sql語句是基于OGNL表達式的。可以方便的在 sql 語句中實現(xiàn)某些邏輯. 總體說來mybatis 動態(tài)SQL 語句主要有以下幾類:

  1. if 語句 (簡單的條件判斷)

  2. choose (when,otherwize) ,相當于java 語言中的 switch ,與 jstl 中的choose 很類似.

  3. trim (對包含的內(nèi)容加上 prefix,或者 suffix 等,前綴,后綴)

  4. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or ,不必擔心多余導致語法錯誤)

  5. set (主要用于更新時)

  6. foreach (在實現(xiàn) mybatis in 語句查詢時特別有用)

  下面分別介紹這幾種處理方式

  1. mybaits if 語句處理 

  1. <select id="dynamicIfTest" parameterType="Blog" resultType="Blog"
  2.         select * from t_blog where 1 = 1 
  3.         <if test="title != null"
  4.             and title = #{title} 
  5.         </if> 
  6.         <if test="content != null"
  7.             and content = #{content} 
  8.         </if> 
  9.         <if test="owner != null"
  10.             and owner = #{owner} 
  11.         </if> 
  12.     </select

 

  解析:

  如果你提供了title參數(shù),那么就要滿足title=#{title},同樣如果你提供了Content和Owner的時候,它們也需要滿足相應的條件,之后就是返回滿足這些條件的所有Blog,這是非常有用的一個功能。

  以往我們使用其他類型框架或者直接使用JDBC的時候, 如果我們要達到同樣的選擇效果的時候,我們就需要拼SQL語句,這是極其麻煩的,比起來,上述的動態(tài)SQL就要簡單多了。

  2. choose (when,otherwize) ,相當于java 語言中的 switch ,與 jstl 中的choose 很類似

  1. <select id="dynamicChooseTest" parameterType="Blog" resultType="Blog"
  2.         select * from t_blog where 1 = 1  
  3.         <choose> 
  4.             <when test="title != null"
  5.                 and title = #{title} 
  6.             </when
  7.             <when test="content != null"
  8.                 and content = #{content} 
  9.             </when
  10.             <otherwise> 
  11.                 and owner = "owner1" 
  12.             </otherwise> 
  13.         </choose> 
  14.     </select

 

  when元素表示當when中的條件滿足的時候就輸出其中的內(nèi)容,跟JAVA中的switch效果差不多的是按照條件的順序,當when中有條件滿足的時候,就會跳出choose,即所有的when和otherwise條件中,只有一個會輸出,當所有的我很條件都不滿足的時候就輸出otherwise中的內(nèi)容。所以上述語句的意思非常簡單, 當title!=null的時候就輸出and titlte = #{title},不再往下判斷條件,當title為空且content!=null的時候就輸出and content = #{content},當所有條件都不滿足的時候就輸出otherwise中的內(nèi)容。

  3.trim (對包含的內(nèi)容加上 prefix,或者 suffix 等,前綴,后綴) 

  1. <select id="dynamicTrimTest" parameterType="Blog" resultType="Blog"
  2.         select * from t_blog  
  3.         <trim prefix="where" prefixOverrides="and |or"
  4.             <if test="title != null"
  5.                 title = #{title} 
  6.             </if> 
  7.             <if test="content != null"
  8.                 and content = #{content} 
  9.             </if> 
  10.             <if test="owner != null"
  11.                 or owner = #{owner} 
  12.             </if> 
  13.         </trim> 
  14.     </select

 

  trim元素的主要功能是可以在自己包含的內(nèi)容前加上某些前綴,也可以在其后加上某些后綴,與之對應的屬性是prefix和suffix;可以把包含內(nèi)容的首部某些內(nèi)容覆蓋,即忽略,也可以把尾部的某些內(nèi)容覆蓋,對應的屬性是prefixOverrides和suffixOverrides;正因為trim有這樣的功能,所以我們也可以非常簡單的利用trim來代替where元素的功能

  4. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or 條件

  1. <select id="dynamicWhereTest" parameterType="Blog" resultType="Blog"
  2.         select * from t_blog  
  3.         <where
  4.             <if test="title != null"
  5.                 title = #{title} 
  6.             </if> 
  7.             <if test="content != null"
  8.                 and content = #{content} 
  9.             </if> 
  10.             <if test="owner != null"
  11.                 and owner = #{owner} 
  12.             </if> 
  13.         </where
  14.     </select

 

  where元素的作用是會在寫入where元素的地方輸出一個where,另外一個好處是你不需要考慮where元素里面的條件輸出是什么樣子的,MyBatis會智能的幫你處理,如果所有的條件都不滿足那么MyBatis就會查出所有的記錄,如果輸出后是and 開頭的,MyBatis會把***個and忽略,當然如果是or開頭的,MyBatis也會把它忽略;此外,在where元素中你不需要考慮空格的問題,MyBatis會智能的幫你加上。像上述例子中,如果title=null, 而content != null,那么輸出的整個語句會是select * from t_blog where content = #{content},而不是select * from t_blog where and content = #{content},因為MyBatis會智能的把***and 或 or 給忽略。

  5.set (主要用于更新時)

 

  1. <update id="dynamicSetTest" parameterType="Blog"
  2.         update t_blog 
  3.         <set
  4.             <if test="title != null"
  5.                 title = #{title}, 
  6.             </if> 
  7.             <if test="content != null"
  8.                 content = #{content}, 
  9.             </if> 
  10.             <if test="owner != null"
  11.                 owner = #{owner} 
  12.             </if> 
  13.         </set
  14.         where id = #{id} 
  15.     </update

 

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

  6. foreach (在實現(xiàn) mybatis in 語句查詢時特別有用)

  foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。foreach元素的屬性主要有item,index,collection,open,separator,close。

  item表示集合中每一個元素進行迭代時的別名,

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

  open表示該語句以什么開始,

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

  close表示以什么結束,

  在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:

  如果傳入的是單參數(shù)且參數(shù)類型是一個List的時候,collection屬性值為list

  如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候,collection的屬性值為array

  如果傳入的參數(shù)是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數(shù)也可以封裝成map,實際上如果你在傳入?yún)?shù)的時候,在MyBatis里面也是會把它封裝成一個Map的,map的key就是參數(shù)名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key

  6.1.單參數(shù)List的類型 

  1. <select id="dynamicForeachTest" resultType="Blog"
  2.         select * from t_blog where id in 
  3.         <foreach collection="list" index="index" item="item" open="(" separator="," close=")"
  4.             #{item} 
  5.         </foreach> 
  6.     </select

 

  上述collection的值為list,對應的Mapper是這樣的

  1. public List<Blog> dynamicForeachTest(List<Integer> ids);  

  測試代碼

  1. @Test 
  2.     public void dynamicForeachTest() { 
  3.         SqlSession session = Util.getSqlSessionFactory().openSession(); 
  4.         BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  5.         List<Integer> ids = new ArrayList<Integer>(); 
  6.         ids.add(1); 
  7.         ids.add(3); 
  8.         ids.add(6); 
  9.         List<Blog> blogs = blogMapper.dynamicForeachTest(ids); 
  10.         for (Blog blog : blogs) 
  11.             System.out.println(blog); 
  12.         session.close(); 
  13.     } 

 

  6.2.數(shù)組類型的參數(shù)

  1. <select id="dynamicForeach2Test" resultType="Blog"
  2.         select * from t_blog where id in 
  3.         <foreach collection="array" index="index" item="item" open="(" separator="," close=")"
  4.             #{item} 
  5.         </foreach> 
  6.     </select

 

  對應mapper

  1. public List<Blog> dynamicForeach2Test(int[] ids);   

  6.3. Map 類型的參數(shù)

  1. <select id="dynamicForeach3Test" resultType="Blog"
  2.         select * from t_blog where title like "%"#{title}"%" and id in 
  3.         <foreach collection="ids" index="index" item="item" open="(" separator="," close=")"
  4.             #{item} 
  5.         </foreach> 
  6.     </select

 

  mapper 應該是這樣的接口:

  public List dynamicForeach3Test(Map

  通過以上方法,就能完成一般的mybatis 的 動態(tài)SQL 語句.最常用的就是 if where foreach這幾個,一定要重點掌握.

  致謝:感謝您的耐心閱讀!

責任編輯:honglu 來源: 博客園
相關推薦

2021-03-02 09:15:24

MyBatisSQL數(shù)據(jù)庫

2019-11-21 10:45:22

MyBatisSQL標簽

2024-06-12 08:36:25

2025-01-07 09:07:36

接口屬性路徑

2024-02-04 09:24:45

MyBatisSQL語句Spring

2021-01-14 05:16:09

MyBatis動態(tài)代理

2020-09-28 09:30:13

mybatis

2021-11-07 14:36:01

SQLJDBCMyBatis

2011-04-07 14:04:28

SQL動態(tài)交叉表

2009-09-17 16:46:34

Linq to sql

2009-09-18 15:15:12

LINQ to SQL

2010-08-05 09:07:24

2010-09-25 16:00:38

sql存儲過程

2010-11-12 13:08:36

動態(tài)sql語句

2010-09-25 16:37:33

SQL動態(tài)查詢

2021-08-27 07:47:06

SQL靜態(tài)程序

2010-11-12 12:01:08

Oracle存儲過程

2009-09-17 16:20:43

Linq to sql

2010-11-12 13:40:38

動態(tài)sql語句

2015-10-28 10:37:13

動態(tài)數(shù)據(jù)屏蔽Dynamic datSQL Server
點贊
收藏

51CTO技術棧公眾號

国产高清av在线| 日本中文在线播放| 精品久久亚洲| 亚洲一区二区三区免费视频| 快播日韩欧美| 国产理论片在线观看| 激情偷拍久久| 在线国产精品视频| 色哟哟无码精品一区二区三区| 中文在线免费二区三区| 亚洲视频精选在线| 欧美精品一区二区视频| 国产精品自拍电影| 国产精品试看| 欧美成人精品在线| 国精产品一区二区三区| 一区二区三区四区高清视频| 日韩欧美在线播放| 黄色一级片国产| 国产永久免费高清在线观看视频| 国产成a人亚洲| 国产精品99导航| 亚洲激情视频一区| 国产精品久久观看| 亚洲天堂精品在线| 稀缺小u女呦精品呦| 看片一区二区| 在线一区二区视频| 欧美丰满熟妇bbbbbb百度| 国产黄色在线观看| 国产欧美一区二区精品性| 成人片在线免费看| 国语对白做受69按摩| 亚洲精品精选| 久久69精品久久久久久国产越南| 毛片aaaaaa| 国产欧美高清视频在线| 欧美videossexotv100| www.cao超碰| se01亚洲视频| 欧美色视频日本版| 色老汉av一区二区三区| 精品国产91洋老外米糕| 久久久久久久高清| 四虎成人在线| 色综合久久久久| 黄色免费观看视频网站| 美女精品导航| 亚洲一区在线观看视频| 特大黑人娇小亚洲女mp4| а天堂8中文最新版在线官网| 91麻豆精东视频| 精品欧美一区二区在线观看视频 | 国产情侣久久久久aⅴ免费| 日韩综合av| 欧美精品粉嫩高潮一区二区| 欧美精品久久久久久久久25p| 成人日韩在线观看| 在线亚洲+欧美+日本专区| 欧美激情国产精品日韩| 欧美男女交配| 欧美日韩中文字幕在线| 欧美 国产 日本| 涩涩视频在线播放| 色哟哟精品一区| 日本免费一级视频| 欧美电影网址| 欧美三级视频在线播放| 91精品999| 成人综合日日夜夜| 精品电影一区二区| 亚洲永久无码7777kkk| 蜜臀久久99精品久久一区二区| 精品一区精品二区| 欧美激情视频二区| 五月婷婷亚洲| 午夜精品久久久久久久99热浪潮| 中文字幕在线观看视频网站| 日本成人中文字幕在线视频| 91香蕉嫩草影院入口| 精品久久久久久亚洲综合网站| 福利电影一区二区三区| 欧美激情导航| 日本免费中文字幕在线| 一区二区三区日韩欧美| 国产乱子伦农村叉叉叉| 主播大秀视频在线观看一区二区| 8v天堂国产在线一区二区| 中文字幕第九页| jlzzjlzz亚洲女人| 米奇精品一区二区三区在线观看| 五月天婷婷网站| 日本人妖一区二区| 99国产高清| 精品一二三区视频| 亚洲美女淫视频| 97xxxxx| 久久av网站| 亚洲香蕉成人av网站在线观看| 懂色av懂色av粉嫩av| 国产精品丝袜xxxxxxx| 国产人妖伪娘一区91| 国产18精品乱码免费看| 国产日韩欧美精品电影三级在线| 国产盗摄视频在线观看| 亚洲午夜天堂| 日韩欧美成人激情| 国产成人一区二区在线观看| 欧美涩涩网站| 国产精品免费久久久久影院 | 亚洲精品一区二区三区不| 免费看特级毛片| 午夜一区不卡| 波多野结衣精品久久| 超碰国产在线| 婷婷久久综合九色国产成人| 深夜福利网站在线观看| 欧洲杯半决赛直播| 992tv在线成人免费观看| 国产又粗又猛又爽| 国产日韩精品一区二区三区在线| 欧美一区二区激情| 91精品麻豆| 亚洲天堂开心观看| 久久艹免费视频| 国产九色精品成人porny| 亚洲精品日韩成人| 欧美xo影院| 日韩国产欧美精品一区二区三区| 青娱乐免费在线视频| 久久国产乱子精品免费女| 蜜桃视频日韩| 欧洲一区精品| 亚洲精品福利在线| 久久精品这里只有精品| 国产一区视频导航| 在线视频不卡一区二区| 日本一区二区三区视频在线| 亚洲免费成人av电影| 黄网在线观看视频| 成人av中文字幕| 国产尤物av一区二区三区| 国产精品亚洲一区二区在线观看| 中文字幕v亚洲ⅴv天堂| 成人黄色片在线观看| 国产亚洲欧洲一区高清在线观看| 日本免费黄视频| 亚洲ab电影| 日本sm极度另类视频| 日本天堂影院在线视频| 日韩欧美精品网址| 黑人巨大精品欧美| 首页亚洲欧美制服丝腿| 日本一区二区免费看| 日韩免费小视频| 社区色欧美激情 | 夜夜嗨av禁果av粉嫩avhd| 国产精品九色蝌蚪自拍| 视频免费1区二区三区| 欧美高清在线| 亚洲影视九九影院在线观看| 日本h片在线| 日韩成人av在线| 亚洲欧美自拍视频| 国产欧美一区二区精品仙草咪| 国产三级三级看三级| 亚洲电影影音先锋| 国产91精品一区二区绿帽| 丰满诱人av在线播放| 日韩成人在线视频观看| 樱花视频在线免费观看| 中国色在线观看另类| 天天干天天av| 欧美精品一卡| 欧美重口乱码一区二区| 久久麻豆视频| 欧美高清电影在线看| 天天射,天天干| 在线日韩av片| 日本黄色片免费观看| 成+人+亚洲+综合天堂| aaa毛片在线观看| 久久亚洲成人| 国产精品一区二区三区精品| 亚洲www啪成人一区二区| 美女久久久久久久| 天天操天天操天天| 欧美三级一区二区| 久久亚洲国产成人精品性色| 久久久久亚洲综合| 激情五月婷婷基地| 国产欧美亚洲一区| 伊人久久大香线蕉午夜av| 国产精品宾馆| 国产精品视频白浆免费视频| 免费毛片在线看片免费丝瓜视频 | 国产精品久久久久久久久久久久午夜片 | 国产男女无遮挡| 国产精品久久久久久久久久10秀| 国产另类第一区| 久久青草免费| 欧美一级大片在线观看| www免费视频观看在线| 亚洲剧情一区二区| av中文字幕在线免费观看| 色屁屁一区二区| 男女免费视频网站| 国产精品色眯眯| 中文字幕av观看| 国产一区二区三区精品视频| aaaaaa亚洲| 国产一区二区三区四区老人| 五月天婷亚洲天综合网鲁鲁鲁| 国产女人18毛片水真多18精品| 国产欧美一区二区三区视频| 性xxxxfreexxxxx欧美丶| 欧美成人久久久| 在线看免费av| 国产一区二区三区欧美| 午夜性色福利视频| 欧美成人一区二区三区片免费| 中文字幕精品在线观看| 欧美性色xo影院| 日本少妇bbwbbw精品| 亚洲免费观看高清| 亚洲 欧美 国产 另类| 久久精品视频在线看| 玖玖爱在线精品视频| 国产成人av影院| 欧美又黄又嫩大片a级| 免费久久精品视频| 日本成人在线免费视频| 99亚洲一区二区| 亚洲色欲久久久综合网东京热| 久久久久国产| 亚洲一区综合| 精品国产不卡| 欧美在线播放一区| 自拍偷拍一区| 久久久久无码国产精品一区| 欧洲亚洲视频| 精品国产91亚洲一区二区三区www| 中文无码日韩欧| 亚洲a在线播放| 白嫩亚洲一区二区三区| 成人免费直播live| 国产精品3区| 92福利视频午夜1000合集在线观看| 久久免费资源| 亚洲一区二区三区四区视频| www.久久久久爱免| 亚洲淫片在线视频| 亚洲国产视频二区| 国产精品国模大尺度私拍| 国产精品三p一区二区| 国产在线精品一区二区三区》| 国产图片一区| 精品国产乱码久久久久久88av| 精品丝袜久久| 蜜桃视频在线观看91| 欧美精品一区二区三区精品| 亚洲精品一区二区三区樱花| 久久精品国产99久久| 大地资源第二页在线观看高清版| 一本精品一区二区三区| 国产精品久久久久久久久电影网| 在线精品一区| 91蝌蚪视频在线观看| 美女mm1313爽爽久久久蜜臀| 午夜不卡福利视频| 成人免费视频网站在线观看| 玖玖爱在线观看| 中文字幕久久午夜不卡| 午夜精品福利在线视频| 午夜影院久久久| 无码人妻精品一区二区三区蜜桃91 | 免费人成在线观看视频播放| 国产欧美大片| 性生活免费在线观看| 高清不卡在线观看av| 蜜桃精品成人影片| 国产精品国产a| 国产性一乱一性一伧一色| 欧美日韩一区二区在线 | 精品国产乱码91久久久久久网站| 天堂在线中文字幕| 中文日韩电影网站| 麻豆蜜桃在线| 国产精品视频xxxx| av综合网站| 日韩久久久久久久| 欧美午夜精品| 人人干人人干人人| 成人激情av网| 992在线观看| 黄色91在线观看| 91九色蝌蚪91por成人| 亚洲国产精品成人av| 91在线看黄| 91av在线播放| 国产在线视频欧美一区| 日本一区视频在线观看免费| 午夜日韩激情| 精品久久久久久中文字幕2017| 国产一区二区不卡在线| 欧美bbbbb性bbbbb视频| 亚洲激情男女视频| 亚洲性猛交富婆| 日韩激情片免费| 三级资源在线| 91精品国产自产在线老师啪| 亚洲人成伊人成综合图片| 黄色a级片免费看| 麻豆高清免费国产一区| a毛片毛片av永久免费| 亚洲一二三四区| 国产日韩精品suv| 视频直播国产精品| 午夜精品久久久久久久久久蜜桃| 成人一区二区三区四区| 国产精品久久久久9999赢消| 亚洲综合在线网站| 91亚洲男人天堂| 久久久久久免费观看| 欧美一级二级三级蜜桃| 色开心亚洲综合| 国产精品第七影院| 综合伊思人在钱三区| 青青草国产免费| 国产成人精品一区二区三区四区| 亚洲国产精品一区二区久久hs| 色婷婷综合久久久久中文 | 中文字幕二三区不卡| 国产精品乱子伦| 亚洲精品98久久久久久中文字幕| 国内在线视频| 国产富婆一区二区三区| 欧美黄在线观看| 97超碰免费在线观看| 亚洲色图在线播放| 国产理论视频在线观看| 久久精品视频在线观看| 一区二区三区| 日韩国产精品毛片| 国产激情精品久久久第一区二区| www.xxxx日本| 欧美一区二区免费视频| 91精品国产91久久久久久青草| 亚洲va欧美va在线观看| 中文在线播放一区二区| 91免费视频污| 亚洲精品欧美激情| 肥臀熟女一区二区三区| 午夜免费日韩视频| 美女久久久久| 天天碰免费视频| 国产精品传媒视频| 99草在线视频| 欧美黑人一区二区三区| av综合网址| 99热成人精品热久久66| 国产欧美一区二区三区沐欲| 一本色道久久综合无码人妻| 久久久国产精品一区| 亚洲高清999| 免费毛片小视频| 久久精品人人做人人综合 | 尤物在线免费视频| 欧美大片在线观看| 不卡福利视频| 五月天久久综合网| 国产激情一区二区三区桃花岛亚洲| 久久久精品视频在线| 日韩av资源在线播放| 日韩美女在线看免费观看| 中文字幕成人一区| 成人性生交大片| www毛片com| 久久色在线播放| 欧美日韩一区二区三区在线电影| 精品免费国产一区二区| 18成人在线观看| 人妻一区二区三区免费| 国产精品久久久av| 在线一区免费| 精品国产av无码| 91精品国产一区二区| 亚洲女色av| 伊人网在线免费| 久久久美女毛片 | 亚洲精品美女久久| 成人免费在线观看视频| 岛国大片在线播放| 日本一区二区免费在线| 亚洲第一天堂在线观看| 日韩免费av片在线观看| 亚洲婷婷在线| 丁香六月激情综合| 日韩精品免费电影| 精品久久久久久久久久岛国gif|