最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis動態(tài)Sql標(biāo)簽使用小結(jié)

 更新時間:2024年04月26日 08:52:30   作者:何以解憂,唯有..  
本文主要介紹了Mybatis動態(tài)Sql標(biāo)簽使用,常用的動態(tài)sql標(biāo)簽包括?if、choose(when、otherwise)、trim(where、set)、foreach,下面就來介紹一下

一、前言

常用的動態(tài)sql標(biāo)簽包括 if、choose(when、otherwise)、trim(where、set)、foreach。

二、標(biāo)簽介紹

2.1、if 標(biāo)簽

1、動態(tài)拼接查詢條件

select DISTINCT ksid as id,ksdm as cd , ksmc as na ,id_org ,1 as fg_active,kspydm as py FROM
        V_CIS_RO_USER
        WHERE 1=1
        <if test="orgId != null">
            AND id_org = #{orgId}
        </if>
        <if test="userId != null">
            AND YHID = #{userId}
        </if>
        <if test="id != null">
            AND ksid = #{id}
        </if>
        <if test="search != null and  search != '' ">
            and  kspydm LIKE concat('%', concat(#{search}, '%'))
        </if>
        ORDER BY kspydm

2、動態(tài)選擇不同的執(zhí)行sql

根據(jù)輸入?yún)?shù)unitType的不同情況來join不同的表查詢結(jié)果集。

<select id="getAdjRatios" resultType="com.fp.epower.model.dto.PowerPredictAdjDto">
        <if test="unitType == null">
            SELECT a.*,b.date,b.status FROM power_forecast_adjust_data a
            LEFT JOIN power_forecast_adjust_info b
            ON a.info_id = b.id
        </if>
        <if test="unitType != null and unitType == 1">
            SELECT a.*,b.date,b.status,c.dispatch_name unitName FROM power_forecast_adjust_data a
            LEFT JOIN power_forecast_adjust_info b
            ON a.info_id = b.id
            LEFT JOIN gen_set c
            ON a.unit_id = c.id
        </if>
        <if test="unitType != null and unitType == 2">
            SELECT a.*,b.date,b.status,c.abbreviation unitName FROM power_forecast_adjust_data a
            LEFT JOIN power_forecast_adjust_info b
            ON a.info_id = b.id
            LEFT JOIN dic_power_plant_info c
            ON a.unit_id = c.id
        </if>
        <where>
            <if test="status != null">
                b.status = #{status}
            </if>
            <if test="unitType != null and unitType != 0">
                AND a.unit_type = #{unitType}
            </if>
            <if test="date != null">
                AND b.date = #{date}
            </if>
        </where>
    </select>

2.2、choose(when、otherwise) 標(biāo)簽

如果拼接的查詢條件存在多個分支,可以使用 choose(類似于switch關(guān)鍵字)

<select id="getAdjRatio" resultType="java.lang.String">
        SELECT ratio FROM power_forecast_adjust_data a
        LEFT JOIN power_forecast_adjust_info b
        ON a.info_id = b.id
        <choose>
            <when test="status != null and status != 0">
                b.`status` = #{status}
            </when>
            <when test="unitType != null and unitType != 0">
                AND a.unit_type = #{unitType}
            </when>
            <when test="unitId != null and unitId != ''">
                AND a.unit_id = #{unitId}
            </when>
            <when test="date != null">
                AND b.date = #{date}
            </when>
            <otherwise>
                b.`status` = 1
            </otherwise>
        </choose>
    </select>

2.3、trim(where、set) 標(biāo)簽

使用 trim 可以定義如何覆蓋前綴或者后綴,可以定義where節(jié)點、set節(jié)點等在有多余字符存在的情況下的前后綴覆蓋策略。

<select id="selectUsers" resultType="com.example.User">
  SELECT *
  FROM user
  <trim prefix="WHERE" prefixOverrides="AND | OR ">
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
    <if test="gender != null">
      AND gender = #{gender}
    </if>
  </trim>
</select>

說明:

在語句的FROM子句后面使用了標(biāo)簽來處理WHERE子句中的條件。下面是對標(biāo)簽的幾個常用屬性的解釋:

1、prefix:指定在元素內(nèi)容之前添加的字符串,這里是"WHERE",即在WHERE子句之前添加"WHERE"關(guān)鍵字。

2、prefixOverrides:指定需要從元素內(nèi)容中移除的字符串,多個字符串使用"|"隔開,這里移除了以"AND"或"OR"開頭的內(nèi)容。

在 trim 標(biāo)簽中,根據(jù)條件判斷使用 if 標(biāo)簽來動態(tài)生成SQL語句的WHERE子句。if 標(biāo)簽的test屬性用于判斷條件是否成立,如果條件成立,則會將 if 標(biāo)簽中的內(nèi)容添加到生成的SQL語句中。

最終生成的SQL語句將會根據(jù)傳入的參數(shù)動態(tài)生成,只在滿足條件的情況下添加WHERE子句的條件,如下所示:

SELECT * FROM user WHERE name = #{name} AND age = #{age}

注意,由于使用了 trim 標(biāo)簽,只有在滿足條件的情況下才會添加WHERE關(guān)鍵字和相應(yīng)的條件。

2.4、foreach 標(biāo)簽

1、foreach元素的屬性

item: 集合元素迭代時的別名稱,該參數(shù)為必選項,如果遍歷的對象是map,則item為val;

index: 在list、array中,index為元素的序號索引。但是在Map中,index為遍歷元素的key值,該參數(shù)為可選項;

open: 遍歷集合時的開始符號,通常與close=")"搭配使用。使用場景IN(),values()時,該參數(shù)為可選項;

separator: 元素之間的分隔符,類比在IN()的時候,separator=“,”,最終所有遍歷的元素將會以設(shè)定的(,)逗號符號隔開,該參數(shù)為可選項;

close: 遍歷集合時的結(jié)束符號,通常與open="("搭配使用,該參數(shù)為可選項;

2、collection屬性值的三種情況

2.1、如果傳入的參數(shù)類型為list時: collection的默認(rèn)屬性值為list,同樣可以使用@Param注解自定義name;

2.2、如果傳入的參數(shù)類型為array時: collection的默認(rèn)屬性值為array,同樣可以使用@Param注解自定義name;

2.3、如果傳入的參數(shù)類型為Map時: collection的屬性值可為三種情況:1.遍歷map.keys;2.遍歷map.values;3.遍歷map.entrySet();

3、代碼示例

<select id="getAdjRatio" resultType="java.lang.String">
        SELECT ratio FROM power_forecast_adjust_data a
        LEFT JOIN power_forecast_adjust_info b
        ON a.info_id = b.id
        <where>
            id IN 
            <foreach collection="ids" item="id" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </where>
</select>

到此這篇關(guān)于Mybatis動態(tài)Sql標(biāo)簽使用小結(jié)的文章就介紹到這了,更多相關(guān)Mybatis動態(tài)Sql標(biāo)簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • SpringBoot項目中使用Swagger2及注解解釋的詳細(xì)教程

    SpringBoot項目中使用Swagger2及注解解釋的詳細(xì)教程

    Swagger2是一個開源項目,用于為RESTful Web服務(wù)生成REST API文檔,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項目中使用Swagger2及注解解釋的詳細(xì)教程,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • java yaml轉(zhuǎn)properties工具類方式

    java yaml轉(zhuǎn)properties工具類方式

    這篇文章主要介紹了java yaml轉(zhuǎn)properties工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring Framework 5.0 入門教程

    Spring Framework 5.0 入門教程

    Spring Framework提供了一個簡易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。這篇文章主要介紹了Spring Framework 5.0 入門教程,感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot 接口開發(fā)教程(httpclient客戶端)

    SpringBoot 接口開發(fā)教程(httpclient客戶端)

    這篇文章主要介紹了SpringBoot 接口開發(fā)教程(httpclient客戶端),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java發(fā)送內(nèi)嵌圖片郵件

    java發(fā)送內(nèi)嵌圖片郵件

    這篇文章主要介紹了java發(fā)送內(nèi)嵌圖片郵件,在博客系統(tǒng)中需要郵件服務(wù)的功能,僅僅是發(fā)送文本內(nèi)容,現(xiàn)在嘗試一下發(fā)送內(nèi)嵌圖片郵件,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java使用OTP動態(tài)口令(每分鐘變一次)進行登錄認(rèn)證

    Java使用OTP動態(tài)口令(每分鐘變一次)進行登錄認(rèn)證

    這篇文章主要介紹了Java使用OTP動態(tài)口令(每分鐘變一次)進行登錄認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • tomcat301與java301解析

    tomcat301與java301解析

    這篇文章主要介紹了omcat301與java301,有需要的朋友可以參考一下
    2014-01-01
  • 解決IDEA中不能正常輸入光標(biāo)變粗的問題

    解決IDEA中不能正常輸入光標(biāo)變粗的問題

    這篇文章主要介紹了在IDEA中不能正常輸入光標(biāo)變粗的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • Java struts2 validate用戶登錄校驗功能實現(xiàn)

    Java struts2 validate用戶登錄校驗功能實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java struts2 validate用戶登錄校驗功能實現(xiàn)的具體步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 深入分析Android系統(tǒng)中SparseArray的源碼

    深入分析Android系統(tǒng)中SparseArray的源碼

    這篇文章主要介紹了深入分析Android系統(tǒng)中SparseArray的源碼,SparseArray為Java實現(xiàn),需要的朋友可以參考下
    2015-07-07

最新評論

高阳县| 霍城县| 丹凤县| 寻乌县| 合阳县| 太和县| 黄龙县| 桂平市| 商南县| 邵武市| 固安县| 赤水市| 寿宁县| 沁水县| 南宫市| 石屏县| 阳原县| 望城县| 苍梧县| 津市市| 林州市| 会泽县| 化州市| 池州市| 明溪县| 桂林市| 宕昌县| 体育| 延津县| 泗阳县| 抚远县| 吉首市| 青神县| 都昌县| 平定县| 塔城市| 荆州市| 澳门| 谢通门县| 赤峰市| 班玛县|