實用!Mybatis中trim標籤的使用教程

2021-01-17 Java面試那些事兒

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


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


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


1、使用trim標籤去除多餘的and關鍵字


有這樣的一個例子:

<select id="findActiveBlogLike"     resultType="Blog">  SELECT * FROM BLOG   WHERE   <if test="state != null">    state =   </if>   <if test="title != null">    AND title like   </if>  <if test="author != null and author.name != null">    AND author_name like   </if></select>


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


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

SELECT * FROM BLOGWHERE 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 =     </if>     <if test="title != null">        AND title like     </if>    <if test="author != null and author.name != null">        AND author_name like     </if>  </where></select>


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

<trim prefix="WHERE" prefixOverrides="AND"> <if test="state != null">   state =  </if>  <if test="title != null">   AND title like  </if> <if test="author != null and author.name != null">   AND author_name like  </if></trim>


2、使用trim標籤去除多餘的逗號


有如下的例子:


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

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


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


其中最重要的屬性是

表示去除sql語句結尾多餘的逗號


註:如果你有興趣的話,也可以研究下Mybatis逆向工程生成的Mapper文件,其中也使用了trim標籤,但結合了foreach、choose等標籤,更多的是牽扯到Criterion的源碼研究。不過研究完之後,你將熟練掌握mybatis各種標籤的使用,學到Criterion的設計思想,對自己的啟發將會很大。


# 本文參考


Mybatis官方文檔(https://mybatis.org/mybatis-3/zh/dynamic-sql.html)


來源:https://blog.csdn.net/wt_better/article/details/80992014




相關焦點

  • 實用!mybatis中trim標籤的使用
    的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values(「 等前綴,或者添加「)「等後綴,可用於選擇性插入、更新、刪除或者條件查詢等操作。
  • MyBatis 標籤 trim,你不會以為我是去空格的吧?
    標籤的使用作者:wt_better來源 : http://blog.csdn.net/wt_better/article/details/80992014MyBatis的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where
  • mybatis框架:配置文件中的標籤詳解
    今日學習的內容說明:核心配置文件中,各種標籤的作用詳解。映射文件中的各種標籤。映射文件中$和#的區別以及特殊用法。最後介紹一款mybatis插件一、核心配置文件標籤也就是這兩天配置的mybatis-config.xml文件。
  • 五大框架之MyBatis生成工具的使用
    五大框架之MyBatis面試經常被問到的問題》,裡面提到一句mybatis可以用工具生成,有朋友問我是什麼工具,今天給大家介紹一下它的使用方法。簡介mybatis-generator-gui-extension是一個為MybatisGenerator編寫的圖形化界面,為實體/Example/Mapper提供了豐富的擴展。
  • Spring boot整合mybatis多數據源簡單使用
    日常開發中,我們很少會在一個應用程式中同時使用多個數據源。但是,如果涉及一些數據遷移等應用,可能會涉及將數據從一個庫遷移到另外一個庫,甚至是不同類型的資料庫,比如MySQL到Oracle。這篇博文,我們不介紹mybatis的基本使用,只介紹基於mybatis配置多數據源的方法。
  • Mybatis第二講 關聯對象查詢
    通常使用動態 SQL 不可能是獨立的一部分, MyBati s 當然使用一種強大的動態 SQL 語言來改進這種情形,這種語言可以被用在任意的 SQL 映射語句中。標籤中的 prefix 屬性表示的是前綴, perfixOverrides 表示的是分割,一定要注意 AND |OR 後面要有一個空格。
  • 玩轉MyBatis動態SQL
    在查詢、刪除、更新的時候很可能會使用到。 必須結合 test 屬性聯合使用。2.1 在 WHERE 條件中使用 if 標籤這是常見的一種現象, 我們在進行按條件查詢的時候, 可能會有多種情況。2.2 在 UPDATE 更新列中使用 if 標籤有時候我們不希望更新所有的欄位, 只更新有變化的欄位。
  • 最全MyBatis中XML映射文件標籤分析+示例
    Mapper文件標籤Mapper中一個提供了9個頂層標籤,除了1個已經過期的我們不需要去了解,另外8個都是必須要掌握的,只要熟練掌握了標籤的使用,使用MyBatis才能如魚得水。接下來我們就一個個來分析一下這些標籤的使用。
  • MyBatis動態SQL
    在MyBatis中,提供了一下幾個標籤來實現動態SQLifchoosewhenotherwisewheresettrimforeach下面我們就來詳細學習這幾個標籤if標籤if標籤中包含一個必須具備的屬性test=""
  • mybatis動態SQL
    如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL,可以徹底擺脫這種痛苦。
  • mybatis最全教程之springboot集成mybatis
    經過前面的教程,相信您對mybatis有了比較深刻的認識和了解,我們看看在實際生產中怎麼使用mybatis來提高工作效率。那麼首先我們要做的就是與spring進行集成。本節課使用springboot與mybatis進行集成。
  • MyBatis入門案例——親測可用
    mybatis/mybatis --><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId>
  • Mybatis 中xml和註解映射,原來如此簡單
    xml方式九個頂級映射元素對應標籤:<mapper namespace="com.tian.mybatis.mapper.UserMapper"> <resultMap id="" type=""></resultMap> <sql id=""></sql> <cache blocking
  • Java程式設計師必會 springmvc-spring-mybatis框架整合搭建傻瓜教程
    ssm是用於將springmvc-spring-mybatis三個框架整合來進行java開發web項目。本文通過ssm三大框架整合的形式講解springmvc的使用教程,最新的框架版本主流IDE,只要按照圖中步驟能夠保證每個人的框架搭建完成並成功運行。這裡使用maven來構建項目,我們需要創建一個名為ssm的maven項目,打包方式為war包。
  • Java程式設計師必須知道的MyBatis經典面試題
    它可以使用XML配置文件或者註解寫SQL語句。對於現在主流的持久層框架,經常會在面試題目中出現,那麼你對MyBatis經典面試題了解多少呢?1. #{}和${}的區別是什麼?#{}是預編譯處理,${}是字符串替換Mybatis在處理#{}時,會將sql中的#{}替換為?
  • Mybatis中查詢結果resultMap使用概述
    resultMap 標籤的作用resultMap 標籤中 子標籤 result 的使用分析resultMap 標籤中 主鍵標籤 id 的使用分析resultMap 中使用到的 jdbctype 與 java 數據類型映射關係
  • Mybatis 動態sql語句if和where標籤巧妙使用
    本文章描述的是 Mybatis if標籤和where標籤的結合使用需求是:根據電話和名字查用戶數據2 mybatis"user"> SELECT id , gender ,nickname ,mobile ,avatar From dts_user WHERE gender = 1 AND mobile LIKE '%${mobile}%'</select>在代碼塊 2-1 中,
  • 還在手寫Mybatis的xml文件,那你就OUT了
    plugins下會出現mybatis-generator的插件引入mybatis-generator的配置文件DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <context
  • MyBatis動態SQL(認真看看,以後寫SQL就爽多了)
    在查詢、刪除、更新的時候很可能會使用到。必須結合 test 屬性聯合使用。2.1 在 WHERE 條件中使用 if 標籤這是常見的一種現象, 我們在進行按條件查詢的時候, 可能會有多種情況。if 標籤2.3 在 INSERT 動態插入中使用 if 標籤我們插入資料庫中的一條記錄, 不是每一個欄位都有值的, 而是動態變化的。
  • Spring-data-mybatis案例
    本節主要學習Spring-data-mybatis案例,即spring集成mybatis框架。1.配置坐標新建maven項目,pom.xml中配置坐標:<dependencies> <!