欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • Maven項(xiàng)目修改JDK版本全過程

    Maven項(xiàng)目修改JDK版本全過程

    這篇文章主要介紹了Maven項(xiàng)目修改JDK版本全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 解決RedisTemplate的key默認(rèn)序列化器的問題

    解決RedisTemplate的key默認(rèn)序列化器的問題

    這篇文章主要介紹了解決RedisTemplate的key默認(rèn)序列化器的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • java 分轉(zhuǎn)元與元轉(zhuǎn)分實(shí)現(xiàn)操作

    java 分轉(zhuǎn)元與元轉(zhuǎn)分實(shí)現(xiàn)操作

    這篇文章主要介紹了java 分轉(zhuǎn)元與元轉(zhuǎn)分實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)

    這篇文章主要介紹了IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié),非常不錯(cuò),具有參考價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理

    深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理

    本篇文章是對(duì)java中的靜態(tài)代理與動(dòng)態(tài)代理進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-10-10
  • java中break和continue源碼解析

    java中break和continue源碼解析

    這篇文章主要針對(duì)java中break和continue的區(qū)別進(jìn)行詳細(xì)介紹,幫助大家更好的學(xué)習(xí)了解java中break和continue源碼,感興趣的小伙伴們可以參考一下
    2016-06-06
  • IntelliJ IDEA中Project與Module的概念以及區(qū)別

    IntelliJ IDEA中Project與Module的概念以及區(qū)別

    這篇文章主要給大家介紹了關(guān)于IntelliJ IDEA中Project與Module的概念以及區(qū)別的相關(guān)資料,文中通過實(shí)例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 編寫Java代碼制造一個(gè)內(nèi)存溢出的情況

    編寫Java代碼制造一個(gè)內(nèi)存溢出的情況

    這篇文章主要介紹了編寫Java代碼制造一個(gè)內(nèi)存溢出的情況,或許這種有意制造能夠更好地幫助理解Java中的內(nèi)存溢出情況XD 需要的朋友可以參考下
    2015-07-07
  • 淺談Java中方法參數(shù)傳遞的問題

    淺談Java中方法參數(shù)傳遞的問題

    下面小編就為大家?guī)硪黄獪\談Java中方法參數(shù)傳遞的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java 實(shí)現(xiàn)將一個(gè)string保存到txt文檔中

    java 實(shí)現(xiàn)將一個(gè)string保存到txt文檔中

    今天小編就為大家分享一篇java 實(shí)現(xiàn)將一個(gè)string保存到txt文檔中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論