精品欧美一区二区三区在线观看 _久久久久国色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一区二区三区| 亚洲人妻一区二区三区| 中文字幕免费一区二区| 日韩欧美国产午夜精品| 国产精品成人久久电影| 国产在线视频网址| 国产一区在线看| 91av在线精品| 成人免费精品动漫网站| 红杏成人性视频免费看| 欧美日韩一区中文字幕| 日韩极品视频在线观看| 国产区av在线| 成人午夜激情视频| 日韩美女视频中文字幕| 国产高清在线免费观看| 国产探花一区| 精品对白一区国产伦| 婷婷丁香激情网| 91制片在线观看| 亚洲欧洲精品一区二区精品久久久| 成人免费视频网站| 在线观看色网站| 久久视频一区| 国内伊人久久久久久网站视频| 五月婷婷六月香| 色天下一区二区三区| 日韩小视频在线观看专区| 国产精品免费成人| 福利影院在线看| 一区二区三区在线观看网站| 亚洲精品高清国产一线久久| 亚州男人的天堂| 成人精品在线视频观看| 成人精品一区二区三区| 中文字幕一区二区人妻| 免费在线亚洲| 91精品国产高清| 国产在线视频99| 欧美精品自拍| 操91在线视频| wwwav国产| 亚洲欧洲中文字幕| 久久久精品国产一区二区| 特级西西人体高清大胆| 欧美码中文字幕在线| 亚洲香蕉成人av网站在线观看| 欧洲一级黄色片| 丝袜美腿一区二区三区动态图| 亚洲国产天堂网精品网站| 欧美一级片在线免费观看| 日韩一区二区三区色| 欧美一区午夜视频在线观看| 国产aⅴ爽av久久久久| 国产欧美自拍| 欧美精品色一区二区三区| 最新天堂在线视频| 国产不卡精品| 日韩欧美国产一二三区| 涩视频在线观看| 国产精品久久久久av蜜臀| 91精品国产全国免费观看| 91看片破解版| 日韩免费高清视频网站| 日韩午夜小视频| 精品少妇人妻av一区二区三区| jazzjazz国产精品麻豆| 亚洲第一页在线| 在线免费播放av| 视频一区在线观看| 在线视频一区二区| 国产成人在线网址| 亚洲五月综合| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 日韩精品在线观看一区二区| 一二三不卡视频| 国产一区二区三区日韩精品| 日韩免费小视频| 中文字幕一区二区三区久久网站 | 成人av影视在线| 国产成人无码www免费视频播放| eeuss鲁片一区二区三区在线观看| 精品无人区一区二区三区| 少妇激情av一区二区| 久久久精品天堂| 在线视频精品一区| 日本孕妇大胆孕交无码| 精品久久久久久亚洲国产300| 777米奇影视第四色| 国产福利亚洲| 精品日韩在线一区| 无码国产69精品久久久久同性| 欧美mv日韩| 久久免费少妇高潮久久精品99| 免费黄色网址在线| 国产一区二区网址| 美女视频久久| 欧美人体视频xxxxx| 色狠狠一区二区| 无码国产精品一区二区高潮| 免费视频国产一区| 欧美成人免费网| 欧美国产一级片| 成人午夜碰碰视频| 在线视频不卡一区二区| 午夜欧美激情| 欧美一级xxx| 国产精品久久免费观看| 国内自拍一区| 成人xxxx视频| 国产高清在线观看| 亚洲不卡一区二区三区| 成人日韩在线视频| 最新精品国偷自产在线| 欧美大胆a视频| 亚洲最新av网站| 99久久精品免费看| 中国黄色录像片| 日本成人福利| 亚洲女同精品视频| 日本少妇激情视频| 国产精品综合一区二区| 午夜精品一区二区三区四区| 久热在线观看视频| 欧美一区二区三区在线观看| 国产真人真事毛片视频| 亚洲女同在线| 国产一区二区在线观看免费播放| 超碰在线免费公开| 精品1区2区3区| 人妻av无码一区二区三区| 亚洲区一区二| 国产精品日韩一区二区三区 | 欧美亚洲国产精品久久| 97热精品视频官网| 亚洲精品人妻无码| 一区二区三区在线视频观看| 九九九九九九九九| 日韩啪啪电影网| 国产精品第一视频| 国产在线视频网址| 在线免费观看日本一区| 鲁丝一区二区三区| 久久久蜜桃一区二区人| 狼狼综合久久久久综合网| 黄毛片在线观看| 亚洲成人网在线观看| 国产在线一二区| 国产91精品一区二区麻豆网站| 91制片厂免费观看| 日韩护士脚交太爽了| 自拍偷拍免费精品| 91福利在线观看视频| 国产精品卡一卡二卡三| 日本肉体xxxx裸体xxx免费| 欧美视频网址| 国产日韩在线精品av| 在线观看a视频| 欧美精品在欧美一区二区少妇| 91香蕉视频污在线观看| 久久成人免费电影| 一区二区三区四区免费观看| 精品三级国产| 久久久久久久久久久久av| 成人毛片在线免费观看| 亚洲成人综合视频| 色婷婷在线影院| 麻豆精品视频在线观看视频| 一区二区三区欧美在线| 亚洲成av人片在线观看www| 欧美极品美女视频网站在线观看免费| 日本激情一区二区| 色网站国产精品| 国产视频精品免费| 国产91丝袜在线播放0| 男人添女人下面高潮视频| 免费视频国产一区| 成人自拍性视频| segui88久久综合9999| 亚洲欧美精品中文字幕在线| 亚洲天堂网视频| 一区二区三区精品在线| 国产精品无码网站| 精品一区二区三区在线播放| 欧美久久在线观看| 精品视频国产| 成人国产一区二区| 国产精品伦理| 欧美成在线视频| 国产在线观看精品一区| 91麻豆精品国产91久久久使用方法| 久久精品性爱视频| 国产欧美一区二区精品性色| 手机在线播放av| 久久先锋资源| 成年丰满熟妇午夜免费视频| 亚洲区小说区图片区qvod| 91精品在线一区| 厕沟全景美女厕沟精品| 久久夜色精品国产亚洲aⅴ| 天天摸天天干天天操| 欧美猛男男办公室激情| 欧美一级视频免费观看| 亚洲欧美自拍偷拍| 91精品人妻一区二区三区蜜桃欧美| 久草在线在线精品观看| 免费看国产曰批40分钟| 天天色天天射综合网| 欧美一区少妇| 久久成人福利| 91蜜桃网站免费观看| 国产成人精品一区二区三区免费 | 三级在线免费观看| 国产在线观看91一区二区三区| 成人91视频| 久久久久久爱| 国产在线日韩在线| 精品裸体bbb| 国产高清在线不卡| 伊伊综合在线| 2020久久国产精品| 福利网站在线观看| 不卡av日日日| mm1313亚洲国产精品美女| 一本色道久久88综合亚洲精品ⅰ| 午夜小视频免费| 亚洲成人在线网| 亚洲成人黄色片| 日韩一级片网站| 国产免费的av| 欧美一卡在线观看| 国产乱码精品一区二区| 欧美日韩中文国产| 亚洲午夜在线播放| 欧美这里有精品| 波多野结衣电车| 色94色欧美sute亚洲线路一久| 亚洲男人第一av| 精品久久久久久国产91| 亚洲国产综合久久| 亚洲大片免费看| 日韩经典在线观看| 欧美日韩亚洲激情| 四虎成人永久免费视频| 欧美性20hd另类| 日本中文字幕久久| 91国模大尺度私拍在线视频| 无码日韩精品一区二区| 大伊人狠狠躁夜夜躁av一区| 久久亚洲天堂网| 色综合久久久网| 伊人久久亚洲综合| 欧美日韩一区三区四区| 一本色道久久综合熟妇| 制服丝袜国产精品| 成人激情四射网| 亚洲第一av网站| 少妇性bbb搡bbb爽爽爽欧美| 亚洲欧洲日产国码av系列天堂| 免费在线视频你懂得| 亚洲天堂av在线免费| 国产在线色视频| 久久久国产精品x99av| 91国内在线| 91国语精品自产拍在线观看性色 | 亚洲精品裸体| 哪个网站能看毛片| 老色鬼精品视频在线观看播放| 亚洲天堂网2018| 国产99精品视频| 中文字幕在线免费看线人| 国产区在线观看成人精品 | 888久久久| 人人妻人人做人人爽| 男女av一区三区二区色多| jizz欧美性11| 粉嫩av一区二区三区在线播放 | 秋霞成人午夜鲁丝一区二区三区| 欧美日韩激情电影| 91在线视频一区| 日韩激情啪啪| 国产a级片免费看| 亚洲每日在线| 亚洲一区日韩精品| 成人精品国产一区二区4080| 欧美做受xxxxxⅹ性视频| 亚洲色图欧洲色图| 最新中文字幕一区| 欧美一级精品大片| 美国一级片在线免费观看视频| 色老头一区二区三区| 成人女同在线观看| 国产精品久久久久久久久| 影音先锋欧美激情| 亚洲成人网上| 亚洲精品资源| 波多野结衣在线免费观看| 99久久免费精品| 九九精品视频免费| 狠狠久久五月精品中文字幕| 国产乱码久久久| 中文日韩电影网站| 波多野结衣视频一区二区| 成人免费网站在线看| 国产精品亚洲片在线播放| 999一区二区三区| 韩日欧美一区二区三区| 久久丫精品忘忧草西安产品| 午夜视频在线观看一区| 国产精品视频一区二区三区,| 亚洲欧美第一页| heyzo中文字幕在线| 成人在线免费观看视视频| 亚洲午夜久久| 成年人午夜视频在线观看| 精品一区二区在线播放| 国产三级av在线播放| 欧美日韩激情小视频| 午夜精品小视频| 久久久国产成人精品| 成人在线不卡| 色综合电影网| 久久黄色网页| 中国极品少妇videossexhd| 亚洲精品五月天| 97超碰人人模人人人爽人人爱| 亚洲天堂免费观看| 性欧美xxx69hd高清| 国产精品亚洲一区| 国产精品www.| 免费观看污网站| 亚洲综合久久av| 国产伦理一区二区| 久久久国产成人精品| 欧美伊人亚洲伊人色综合动图| 日韩av一区二区三区美女毛片| 国产日韩精品视频一区二区三区| 免费不卡的av| 亚洲图片一区二区| 午夜久久久久久噜噜噜噜| 欧美精品在线播放| 日本高清精品| 成人在线免费高清视频| 国产一区二区在线影院| 欧美日韩在线视频免费播放| 欧美一级一级性生活免费录像| 黄色免费在线观看网站| 91日本视频在线| 午夜国产精品视频| 中国xxxx性xxxx产国| 午夜精品视频在线观看| 亚洲 欧美 激情 另类| 欧美亚洲第一页| 狠狠操综合网| 中文字幕第38页| 亚洲色图.com| 亚洲免费不卡视频| 欧洲一区二区视频| 成人直播大秀| 老女人性生活视频| 午夜精品久久久久久不卡8050| 欧美日韩免费做爰大片| 国产成人在线一区| 欧美激情理论| xxxx视频在线观看| 欧美三级免费观看| 91啦中文在线| 91久久大香伊蕉在人线| 99精品久久久| 国产精品成人在线视频| 91麻豆精品国产| av在线播放资源| 午夜精品电影在线观看| 韩国毛片一区二区三区| 国产污片在线观看| 亚洲男人第一网站| 祥仔av免费一区二区三区四区| 欧美a级免费视频| 久久久久国产精品免费免费搜索| 一个人看的www日本高清视频| 毛片精品免费在线观看| 国产一区二区三区亚洲| 色七七在线观看| 亚洲在线观看免费| 国产精品一级伦理| 99久热re在线精品996热视频| 亚洲影院一区| 成年人午夜剧场| 亚洲免费高清视频| 国产精品一站二站| 六月丁香婷婷在线| 一区二区三区中文字幕电影 | 国产一区二区在线视频聊天| 久久久久久久久久久成人| 精品一区二区三区在线| av不卡中文字幕| 欧美日韩dvd在线观看| а√在线中文在线新版| 亚洲黄色网址在线观看| 久久久久久久久久久久久久久99 |