1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Mybatis trim 標(biāo)簽的 2 個妙用!

        共 1905字,需瀏覽 4分鐘

         ·

        2020-07-30 18:08

        Java技術(shù)棧

        www.javastack.cn

        關(guān)注閱讀更多優(yōu)質(zhì)文章



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

        以下是trim標(biāo)簽中涉及到的屬性:

        下面使用幾個例子來說明Mybatis trim標(biāo)簽的使用。

        1、使用trim標(biāo)簽去除多余的and關(guān)鍵字

        有這樣的一個例子:

        <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

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

        這條 SQL 最終會是這樣:

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

        你可以使用where標(biāo)簽來解決這個問題,where 元素只會在至少有一個子元素的條件返回 SQL 子句的情況下才去插入“WHERE”子句。而且,若語句的開頭為“AND”或“OR”,where 元素也會將它們?nèi)コ?/p>

        <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標(biāo)簽也可以完成相同的功能,寫法如下:

        <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標(biāo)簽去除多余的逗號

        有如下的例子:

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

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

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

        其中最重要的屬性是

        suffixOverrides=","

        表示去除sql語句結(jié)尾多余的逗號,關(guān)注公眾號Java技術(shù)棧獲取更多Mybatis教程都是干貨哦。

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

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

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

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

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

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

        瀏覽 105
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            18禁国产| 精品国产一区二区三区噜噜噜 | 操嫩B国内大全 | 韩国黄色免费电影 | 爱搞逼综合网 | 九九热久久这里只有精品 | 色人网站 | 欧美一二三区 | 欧美肥妇bwbwbwbxx | 台湾三级肉与欲 |