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

首頁 > 學院 > 開發設計 > 正文

最常用的動態sql語句梳理——分享給使用Mybatis的小伙伴們!

2019-11-15 00:26:57
字體:
來源:轉載
供稿:網友
最常用的動態sql語句梳理——分享給使用Mybatis的小伙伴們!

公司項目中一直使用Mybatis作為持久層框架,自然,動態sql寫得也比較多了,最常見的莫過于在查詢語句中使用if標簽來動態地改變過濾條件了。Mybatis的強大特性之一便是它的動態sql,免除了拼接sql帶來的各種麻煩,在開發項目的過程中,常見的和不常見的你都有可能會用到,現在就來把這一塊總結一下。

  •   if
  •   choose(when,otherwise)
  •   trim(where,set)
  •   foreach

if

<select id="getCategory" parameterType="EshopShopCategory" resultMap="EshopCategory" >   SELECT * from CATEGORY t WHERE (1=1)    <if test="shopCategoryId!=null">        AND t.category_id  =#{shopCategoryId}    </if>    <if test="shopCategoryName!=null">        AND t.CATEGORY_NAME  like '%${shopCategoryName}%'    </if>    <if test="shopId==null">        AND t.shop_id=0     </if>    ORDER BY SEQUENCE_NO</select>

  這通常用于多條件組合查詢。

<insert id="addCategory" parameterType="EshopCategory">        insert into  CATEGORY(        <if test="shopCategoryName!=null and shopCategoryName!='' ">          shop_category_name,        </if>        <if test="shopId!=null and shopId!=''">            shop_id,        </if>        ADD_TIME)         values(          <if test="shopCategoryName!=null and shopCategoryName!=''">              #{shopCategoryName,jdbcType=VARCHAR},          </if>          <if test="shopId!=null and shopId!=''">              #{shopId,jdbcType=NUMERIC},          </if>          current_timestamp       )    </insert> 
這適用于數據庫有默認值的時候可以不讓插入空值。
<update id="update

這條動態地修改語句用得非常多,是因為很多時候我們在做修改操作時并不確定到底要修改哪些字段(哪些屬性),可能有的需要保存原值不變,這時候就可以做動態的sql,你新建一個對象后將需要修改的字段附上新值,這樣不用修改的屬性在這個對象上表現地是null,調用這個動態的sql時便可以完成部分修改。

choose,when,otherwise

適用場景:我們不想用到所有的條件語句,而只想從中擇其一二。針對這種情況,MyBatis 提供了 choose 元素,它有點像 java 中的 switch 語句。(我感覺它有點像提供多種條件規則時,而這些規則又可以綜合寫在一起時)

<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>

到目前為止,我還沒有用到過choose,以后多留意。

trim,where,set

為了避免當if動態條件都不成立時,或者第一個條件不成立第二個條件成立時出現諸如"select * from TableA where"或者"select * from TableA and where"病態sql,我們可以使用trim,where,set標簽來解決。

<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關鍵字之后加上1=1的條件。即不管有無動態條件,總可以得到完整的sql:select * from A where 1=1。。。

<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>

foreach

foreach有時候在項目中會遇到,而且不止一次,用的時候是需要動點腦子的。通常用于篩選出在多個值組成的一個集合中或者排除多個值的場景,說白了,也就是我們之前寫sql時用到in、not in的時候:(集合是動態不確定的,需要從前臺傳值過來)

<select id="selectNumInOrder" resultType="String">     select count(0) from order a left join item b on a.ORDER_ID = b.ORDER_ID     where a.STATUS in ('1','2','3','5')      <if test="list.size() > 0">          and b.PHONE_NUM in           <foreach item="numberList" collection="list" open="(" separator="," close=")">              #{numberList.num}          </foreach>     </if></select>
<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 元素的功能是非常強大的,它允許你指定一個集合,聲明可以用在元素體內的集合項和索引變量。它也允許你指定開閉匹配的字符串以及在迭代中間放置分隔符。這個元素是很智能的,因此它不會偶然地附加多余的分隔符。

注意你可以將一個 List 實例或者數組作為參數對象傳給 MyBatis,當你這么做的時候,MyBatis 會自動將它包裝在一個 Map 中并以名稱為鍵。List 實例將會以“list”作為鍵,而數組實例的鍵將是“array”。

以上是結合http://mybatis.github.io/mybatis-3/zh/getting-started.html及自己開發中比較常用的總結出來的,今天給梳理一下,分享給大家!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品在线播放| 亚洲最大av在线| 97色在线视频观看| 国产区精品在线观看| 色偷偷av亚洲男人的天堂| 海角国产乱辈乱精品视频| 国产精品亚洲综合天堂夜夜| 日韩中文在线中文网三级| 91影视免费在线观看| 国产+人+亚洲| 国产精品免费观看在线| 久久久久久久成人| 日韩欧美aⅴ综合网站发布| 欧美极品xxxx| 成人www视频在线观看| 45www国产精品网站| 久久久久久久国产精品视频| 亚洲片国产一区一级在线观看| 欧美高跟鞋交xxxxxhd| 日本乱人伦a精品| 91理论片午午论夜理片久久| 国产亚洲免费的视频看| 91色视频在线导航| 国产一区深夜福利| 亚洲a区在线视频| 日韩欧美成人网| 97在线观看免费高清| 色av中文字幕一区| 国产精品无码专区在线观看| 欧美日韩国产一区中文午夜| 欧美精品亚州精品| 91麻豆国产语对白在线观看| 在线视频一区二区| 国产精品久久久久久久久久免费| 亚洲精品98久久久久久中文字幕| 日韩av网站导航| 久久五月天综合| 尤物九九久久国产精品的特点| 成人精品一区二区三区电影黑人| 亚洲石原莉奈一区二区在线观看| 欧美日韩中文字幕| 亚洲欧洲国产伦综合| 国产主播喷水一区二区| 国产精品一久久香蕉国产线看观看| 91久久精品国产91久久性色| 国产精品视频一区国模私拍| 性色av一区二区三区| 亚洲高清一二三区| 久久久精品日本| 欧美国产日韩精品| 国产精品视频精品| 国产精品久久久久久久久久久久久| 亚洲成人网在线观看| 精品国产老师黑色丝袜高跟鞋| 亚洲日本成人网| 亚洲欧美日韩爽爽影院| 日韩在线观看网址| 国产精品吹潮在线观看| 最近的2019中文字幕免费一页| 欧美电影在线免费观看网站| 国产精品av网站| 91国内在线视频| 欧美在线视频免费播放| 亚洲色图17p| 国产在线观看精品| 亚洲美女免费精品视频在线观看| 97精品国产97久久久久久| 欧美性生活大片免费观看网址| 97免费中文视频在线观看| 中文字幕一区日韩电影| 日韩精品视频中文在线观看| 美女啪啪无遮挡免费久久网站| 91手机视频在线观看| 日韩免费视频在线观看| 欧美男插女视频| 亚洲国产第一页| 欧美在线视频一区二区| 国产成人短视频| 欧美日韩中文字幕在线| 国产日韩欧美另类| 亚洲国产高潮在线观看| 成人乱人伦精品视频在线观看| 亚洲精品国产成人| 精品久久久久久久久久| 国产午夜精品免费一区二区三区| 亚洲国产精品成人一区二区| 日本a级片电影一区二区| 久久的精品视频| 日本91av在线播放| 原创国产精品91| 国产精品久久久久国产a级| 欧美性色视频在线| 欧美精品免费看| 久久精品福利视频| 欧美美女18p| 日韩国产精品亚洲а∨天堂免| 日韩av中文字幕在线免费观看| 亚洲欧美激情视频| 亚洲一区国产精品| 欧美国产日韩一区二区| 成人免费福利视频| 日韩在线观看视频免费| 久久久久亚洲精品成人网小说| 日韩美女免费观看| 日韩最新免费不卡| 欧美亚洲视频一区二区| 亚洲高清色综合| 国产精品白嫩初高中害羞小美女| 久久av资源网站| 91香蕉亚洲精品| 在线视频欧美日韩精品| 欧美日韩第一页| 国产在线视频不卡| 国产精品美女久久久久av超清| 91精品久久久久久久久久久久久| 亚洲欧美日韩成人| 国产91精品久久久久| 精品国产区一区二区三区在线观看| 欧美激情视频网| 国产精品视频公开费视频| 国产一区二区三区高清在线观看| 欧美国产日韩在线| 国产精品啪视频| 欧美电影第一页| 亚洲国产第一页| 日韩最新免费不卡| 色黄久久久久久| 日韩欧美在线观看视频| 久久69精品久久久久久久电影好| 国产成人精品最新| 精品国产一区久久久| 久久久精品国产一区二区| 国产欧美亚洲精品| 欧美激情一级二级| 大量国产精品视频| 啊v视频在线一区二区三区| 久久久久久伊人| 91影院在线免费观看视频| 国产精品久久久久9999| 国产精品扒开腿做| 久久这里有精品视频| 原创国产精品91| 日韩亚洲成人av在线| 成人情趣片在线观看免费| 亚洲天堂av网| 国产精品永久在线| 亚州国产精品久久久| 国产精品视频yy9099| 久久精视频免费在线久久完整在线看| 91高清视频在线免费观看| …久久精品99久久香蕉国产| 91久久久亚洲精品| 最近中文字幕2019免费| 国产91精品在线播放| 欧美激情综合亚洲一二区| 国内精久久久久久久久久人| 国产成人黄色av| 一本大道久久加勒比香蕉| 久久久噜噜噜久久中文字免| 九九久久综合网站| 97精品一区二区视频在线观看| 91最新在线免费观看| 欧美午夜精品久久久久久久| 色综合久久天天综线观看|