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

Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼

 更新時(shí)間:2023年12月03日 16:30:14   作者:魚(yú)跡  
當(dāng)編寫(xiě) MyBatis 中復(fù)雜動(dòng)態(tài) SQL 語(yǔ)句時(shí),使用 XML 格式是一種非常靈活的方式,本文主要為大家詳細(xì)介紹了Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的具體方法,需要的可以參考下

前言

當(dāng)編寫(xiě) MyBatis 中復(fù)雜動(dòng)態(tài) SQL 語(yǔ)句時(shí),使用 XML 格式是一種非常靈活的方式。這樣做可以根據(jù)不同條件動(dòng)態(tài)生成 SQL 查詢,更新或刪除語(yǔ)句。以下是一篇簡(jiǎn)要的教程,詳細(xì)介紹如何使用 MyBatis XML 來(lái)編寫(xiě)動(dòng)態(tài) SQL。

1. 動(dòng)態(tài)條件查詢

假設(shè)有一個(gè) User 實(shí)體,有 id、username 和 email 字段,我們希望根據(jù)不同條件查詢用戶信息。

<!-- 在 Mapper XML 文件中編寫(xiě)動(dòng)態(tài) SQL 查詢 -->
<select id="selectUsers" resultType="User">
  SELECT * FROM users
  <where>
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="username != null and username != ''">
      AND username = #{username}
    </if>
    <if test="email != null and email != ''">
      AND email = #{email}
    </if>
  </where>
</select>

<where> 標(biāo)簽用于將動(dòng)態(tài)生成的條件組合到 WHERE 子句中。

<if> 標(biāo)簽根據(jù)條件的存在與否來(lái)動(dòng)態(tài)生成查詢條件。

上面的方法可以根據(jù)id、username、email進(jìn)行條件查詢,當(dāng)test后面的語(yǔ)句為true的時(shí)候,會(huì)將if標(biāo)簽內(nèi)的語(yǔ)句拼接。

2. 動(dòng)態(tài)更新語(yǔ)句

假設(shè)我們想根據(jù)不同的條件更新用戶信息。

<!-- 在 Mapper XML 文件中編寫(xiě)動(dòng)態(tài) SQL 更新 -->
<update id="updateUser" parameterType="User">
  UPDATE users
  <set>
    <if test="username != null">
      username = #{username},
    </if>
    <if test="email != null">
      email = #{email},
    </if>
  </set>
  WHERE id = #{id}
</update>

<set> 標(biāo)簽用于指定要更新的字段。

<if> 標(biāo)簽根據(jù)條件動(dòng)態(tài)設(shè)置要更新的字段。

3. 動(dòng)態(tài)插入語(yǔ)句

如果要根據(jù)不同情況插入不同的字段,也可以使用動(dòng)態(tài) SQL。

<!-- 在 Mapper XML 文件中編寫(xiě)動(dòng)態(tài) SQL 插入 -->
<insert id="insertUser" parameterType="User">
  INSERT INTO users
  <trim prefix="(" suffix=")" suffixOverrides=",">
    <if test="id != null">
      id,
    </if>
    <if test="username != null and username != ''">
      username,
    </if>
    <if test="email != null and email != ''">
      email,
    </if>
  </trim>
  <trim prefix="VALUES (" suffix=")" suffixOverrides=",">
    <if test="id != null">
      #{id},
    </if>
    <if test="username != null and username != ''">
      #{username},
    </if>
    <if test="email != null and email != ''">
      #{email},
    </if>
  </trim>
</insert>

<trim> 標(biāo)簽用于動(dòng)態(tài)設(shè)置插入的字段和對(duì)應(yīng)的值,當(dāng)trim標(biāo)簽內(nèi)的內(nèi)容為空時(shí),不會(huì)添加前綴。

prefix 和 suffix 屬性用于指定插入語(yǔ)句的前綴和后綴。

suffixOverrides 屬性用于去除最后一個(gè)不必要的逗號(hào)。

4、其他標(biāo)簽的使用

基礎(chǔ)的語(yǔ)法使用如下所示。choose、when、otherwise 有點(diǎn)像if-else if -else的感覺(jué)

<!-- 使用 choose、when、otherwise 標(biāo)簽實(shí)現(xiàn)條件選擇 -->
<select id="getUserByIdOrUsername" resultType="User">
    SELECT * FROM users
    <where>
        <choose>
            <when test="id != null">
                AND id = #{id}
            </when>
            <when test="username != null and username != ''">
                AND username = #{username}
            </when>
            <otherwise>
                AND 1=1
            </otherwise>
        </choose>
    </where>
</select>
???????
<!-- 使用 foreach 標(biāo)簽進(jìn)行遍歷操作 -->
<select id="getUsersByIdList" resultType="User">
    SELECT * FROM users
    WHERE id IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

到此這篇關(guān)于Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼的文章就介紹到這了,更多相關(guān)Mybatis動(dòng)態(tài)sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring事務(wù)管理的使用細(xì)則淺析

    Spring事務(wù)管理的使用細(xì)則淺析

    事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就 回退到事務(wù)開(kāi)始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring開(kāi)發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2023-02-02
  • Java中Integer的parseInt和valueOf的區(qū)別詳解

    Java中Integer的parseInt和valueOf的區(qū)別詳解

    這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類(lèi)型,Integer.valueOf(s)是把字符串解析成Integer對(duì)象類(lèi)型,其實(shí)int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下
    2023-11-11
  • java音樂(lè)播放器課程設(shè)計(jì)

    java音樂(lè)播放器課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java音樂(lè)播放器的課程設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java異常機(jī)制分析

    java異常機(jī)制分析

    這篇文章主要介紹了java異常機(jī)制,包括異常機(jī)制的捕獲、拋出及常見(jiàn)的異常機(jī)制總結(jié),需要的朋友可以參考下
    2014-09-09
  • SpringBoot?@RestControllerAdvice注解對(duì)返回值統(tǒng)一封裝的處理方法

    SpringBoot?@RestControllerAdvice注解對(duì)返回值統(tǒng)一封裝的處理方法

    這篇文章主要介紹了SpringBoot?@RestControllerAdvice注解對(duì)返回值統(tǒng)一封裝,使用@RestControllerAdvice對(duì)響應(yīng)進(jìn)行增強(qiáng),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • java跳出循環(huán)的三種方式總結(jié)(break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句)

    java跳出循環(huán)的三種方式總結(jié)(break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句)

    在實(shí)際編程中,有時(shí)需要在條件語(yǔ)句匹配的時(shí)候跳出循環(huán),下面這篇文章主要給大家介紹了關(guān)于java跳出循環(huán)的三種方式,其中包括break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程

    spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程

    這篇文章主要為大家介紹了spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • MyBatis?SqlSource源碼示例解析

    MyBatis?SqlSource源碼示例解析

    這篇文章主要為大家介紹了MyBatis?SqlSource源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 使用SpringBoot+nmap4j獲取端口信息的代碼詳解

    使用SpringBoot+nmap4j獲取端口信息的代碼詳解

    這篇文章主要介紹了使用 SpringBoot + nmap4j 獲取端口信息,包括需求背景、nmap4j 的相關(guān)介紹、代碼說(shuō)明(含測(cè)試代碼、改造后的代碼及參數(shù)說(shuō)明),還提到了文件讀取方式和依賴引入方式,最終請(qǐng)求能獲取到數(shù)據(jù),需要的朋友可以參考下
    2025-01-01
  • spring boot開(kāi)發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    spring boot開(kāi)發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    Spring Boot支持容器的自動(dòng)配置,默認(rèn)是Tomcat,當(dāng)然我們也是可以進(jìn)行修改的。這篇文章給大家介紹了spring boot開(kāi)發(fā)遇到坑之spring-boot-starter-web配置文件使用教程,需要的朋友參考下吧
    2018-01-01

最新評(píng)論