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

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

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

一、前言

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

二、標(biāo)簽介紹

2.1、if 標(biāo)簽

1、動(dòng)態(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、動(dòng)態(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)簽

如果拼接的查詢條件存在多個(gè)分支,可以使用 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é)點(diǎn)、set節(jié)點(diǎn)等在有多余字符存在的情況下的前后綴覆蓋策略。

<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子句中的條件。下面是對(duì)標(biāo)簽的幾個(gè)常用屬性的解釋:

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

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

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

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

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

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

2.4、foreach 標(biāo)簽

1、foreach元素的屬性

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

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

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

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

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

2、collection屬性值的三種情況

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

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

2.3、如果傳入的參數(shù)類型為Map時(shí): 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動(dòng)態(tài)Sql標(biāo)簽使用小結(jié)的文章就介紹到這了,更多相關(guān)Mybatis動(dòng)態(tài)Sql標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

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

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

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

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

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

    Spring Framework 5.0 入門教程

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

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

    這篇文章主要介紹了SpringBoot 接口開發(fā)教程(httpclient客戶端),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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動(dòng)態(tài)口令(每分鐘變一次)進(jìn)行登錄認(rèn)證

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

    這篇文章主要介紹了Java使用OTP動(dòng)態(tài)口令(每分鐘變一次)進(jìn)行登錄認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • Java struts2 validate用戶登錄校驗(yàn)功能實(shí)現(xiàn)

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

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

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

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

最新評(píng)論

临西县| 怀仁县| 洛阳市| 大关县| 文安县| 平陆县| 无极县| 铜川市| 湟中县| 娄底市| 罗源县| 中阳县| 阿拉尔市| 长治市| 瓦房店市| 定远县| 报价| 得荣县| 庆云县| 白城市| 集安市| 南木林县| 鹿邑县| 临猗县| 英德市| 武清区| 衡阳市| 鄯善县| 社旗县| 基隆市| 象山县| 武隆县| SHOW| 德清县| 炉霍县| 大厂| 瑞安市| 安乡县| 浪卡子县| 曲周县| 丰镇市|