<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Mybatis trim 標簽的 2 個妙用!

          共 1905字,需瀏覽 4分鐘

           ·

          2020-07-30 18:08

          Java技術棧

          www.javastack.cn

          關注閱讀更多優(yōu)質文章



          mybatis的trim標簽一般用于去除sql語句中多余的and關鍵字,逗號,或者給sql語句前拼接 “where“、“set“以及“values(“ 等前綴,或者添加“)“等后綴,可用于選擇性插入、更新、刪除或者條件查詢等操作。

          以下是trim標簽中涉及到的屬性:

          下面使用幾個例子來說明Mybatis trim標簽的使用。

          1、使用trim標簽去除多余的and關鍵字

          有這樣的一個例子:

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

          如果這些條件沒有一個能匹配上會發(fā)生什么?最終這條 SQL 會變成這樣:

          SELECT?*?FROM?BLOG
          WHERE

          這會導致查詢失敗。如果僅僅第二個條件匹配又會怎樣?

          這條 SQL 最終會是這樣:

          SELECT?*?FROM?BLOG
          WHERE?
          AND?title?like?‘someTitle’

          你可以使用where標簽來解決這個問題,where 元素只會在至少有一個子元素的條件返回 SQL 子句的情況下才去插入“WHERE”子句。而且,若語句的開頭為“AND”或“OR”,where 元素也會將它們去除。

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

          trim標簽也可以完成相同的功能,寫法如下:

          <trim?prefix="WHERE"?prefixOverrides="AND">
          ?<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>
          trim>

          2、使用trim標簽去除多余的逗號

          有如下的例子:

          如果紅框里面的條件沒有匹配上,sql語句會變成如下:

          INSERT?INTO?role(role_name,)?VALUES(roleName,)

          插入將會失敗。使用trim標簽可以解決此問題,只需做少量的修改,如下所示:

          其中最重要的屬性是

          suffixOverrides=","

          表示去除sql語句結尾多余的逗號,關注公眾號Java技術棧獲取更多Mybatis教程都是干貨哦。

          注:如果你有興趣的話,也可以研究下Mybatis逆向工程生成的Mapper文件,其中也使用了trim標簽,但結合了foreach、choose等標簽,更多的是牽扯到Criterion的源碼研究。

          不過研究完之后,你將熟練掌握Mybatis各種標簽的使用,學到Criterion的設計思想,對自己的啟發(fā)將會很大。

          如果想要了解更多關余trim標簽的內容,請移步《trim標簽源碼解析》。本文參考 Mybatis官方文檔(https://mybatis.org/mybatis-3/zh/dynamic-sql.html)

          版權聲明:本文為CSDN博主「wt_better」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/wt_better/article/details/80992014

          最近熱文:
          1、盤點 6 個被淘汰的 Java 技術,曾經風光過!
          2、Spring Boot 太狠了,一次發(fā)布 3 個版本!
          3、Spring Boot Redis 實現分布式鎖,真香!
          4、Spring Boot 如何快速集成 Redis?
          5、Java 14 祭出神器,Lombok 被干掉了?
          6、Java 14 祭出增強版 switch,真香!!
          7、Spring Boot 2.3 優(yōu)雅關閉新姿勢,真香!
          8、Spring Boot 干掉了 Maven 擁抱 Gradle!
          9、公司來了個新同事不會用 Lombok!
          10、Spring Cloud 2020 版本重大變革!
          掃碼關注Java技術棧公眾號閱讀更多干貨。

          點擊「閱讀原文」獲取面試題大全~

          瀏覽 105
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www豆花视频 | 俺要去97 | 中文字幕青娱乐 | 欧美日韩18禁 | 操操操免费视频 |