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

Java中MyBatis的動態(tài)語句詳解

 更新時間:2023年08月02日 10:23:58   作者:碼匠_CodeArtist  
這篇文章主要介紹了Java中MyBatis的動態(tài)語句詳解,動態(tài) SQL 是 MyBatis 的強大特性之一,通過不同參數(shù)生成不同的 SQL,可以動態(tài)地對數(shù)據(jù)持久層進行操作,而不需要每個數(shù)據(jù)訪問操作都要進行手動地拼接 SQL 語句,需要的朋友可以參考下

一、 概述

動態(tài) SQL 是 MyBatis 的強大特性之一,通過不同參數(shù)生成不同的 SQL,可以動態(tài)地對數(shù)據(jù)持久層進行操作,而不需要每個數(shù)據(jù)訪問操作都要進行手動地拼接 SQL 語句。

二、動態(tài)語句

1. if

<if> 語句可以根據(jù)條件指定 SQL 部分,例如 where 條件。

查詢數(shù)據(jù)接口如下:

public interface UserSqlMapper {
    List<User> selectByUsername(@Param("username") String username, @Param("status") Integer status);
}

對應映射語句如下:

<select id="selectByUsername" resultType="User">
    SELECT * FROM t_user WHERE 1 = 1
    <if test="status != null">
        AND status = #{status}
    </if>
    <if test="username != null and username != ''">
        AND username = #{username}
    </if>
</select>

上面語句當 status 不為 null 時,以及 username 不為空字符串時,對應的查詢條件才會生效。

2. choose、when、otherwise

<choose> 語句類似于 Java 的 switch 語句,可以從多個條件中選擇一個使用。

<select id="selectByUsername" resultType="User">
    SELECT * FROM t_user WHERE 1 = 1
    <choose>
        <when test="status != null">
            AND status = #{status}
        </when>
        <otherwise>
            AND username = #{username}
        </otherwise>
    </choose>
</select>

上面語句根據(jù) status 是否為 null 而執(zhí)行不同的查詢條件,每次查詢只存在一個查詢條件。

3. trim、where、set

在前面的例子中,where 后面都會加上 1=1 這個條件,為了解決當所有條件都沒生效時,where 條件為空而產(chǎn)生異常的問題。

在更新語句 set 后面也會出現(xiàn)同樣的問題,可以使用 <trim> 語句通過指定前綴和后綴的方式來解決。

MyBatis 也提供更簡單的 <where> 語句和 <set> 語句來解決這個問題。

例如下面兩個接口:

public interface UserSqlMapper {
    List<User> selectByUsername(@Param("username") String username, @Param("status") Integer status);
    void updateById(User user);
}

對應的 <trim> 映射 where 語句如下:

<select id="selectByUsername" resultType="User">
    SELECT * FROM t_user
    <trim prefix="WHERE" prefixOverrides="AND|OR">
        <if test="status != null">
            AND status = #{status}
        </if>
        <if test="username != null and username != ''">
            AND username = #{username}
        </if>
    </trim>
</select>

對應的 <where> 映射語句如下:

<select id="selectByUsername" resultType="User">
    SELECT * FROM t_user
    <where>
        <if test="status != null">
            AND status = #{status}
        </if>
        <if test="username != null and username != ''">
            AND username = #{username}
        </if>
    </where>
</select>

對應的 <trim> 映射 update 語句如下:

<update id="updateById">
    UPDATE t_user
    <trim prefix="SET" suffixOverrides=",">
        <if test="status != null">
            status = #{status},
        </if>
        <if test="username != null and username != ''">
            username = #{username},
        </if>
    </trim>
</update>

對應的 <set> 映射語句如下:

<update id="updateById">
    UPDATE t_user
    <set>
        <if test="status != null">
            status = #{status},
        </if>
        <if test="username != null and username != ''">
            username = #{username},
        </if>
    </set>
</update>

4. foreach

<foreach> 可以對集合進行遍歷,例如使用 IN 條件語句的時候。

查詢數(shù)據(jù)接口如下:

public interface UserSqlMapper {
    List<User> selectInIdList(@Param("idList") List<Long> idList);
}

對應映射語句如下:

<select id="selectInIdList" resultType="User">
    SELECT * FROM t_user
    <where>
        <foreach item="item" index="index" collection="idList" open="id IN (" separator="," close=")" nullable="true">
            #{item}
        </foreach>
    </where>
</select>

item 指定元素,index 指定索引。

5. script

<script> 可以在接口上的注解中使用動態(tài)SQL。

例如查詢數(shù)據(jù)接口如下:

public interface UserSqlMapper {
    @Select("<script>" +
            "SELECT * FROM t_user" +
            "<where>" +
            "   <if test='status != null'>AND status = #{status}</if>" +
            "   <if test='username != null'>AND username = #{username}</if>" +
            "</where>" +
            "</script>")
    List<User> selectByUser(User user);
}

<script> 標簽里面的內(nèi)容和在 XML 文件中的動態(tài) SQL 語法一致。

到此這篇關于Java中MyBatis的動態(tài)語句詳解的文章就介紹到這了,更多相關MyBatis的動態(tài)語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用spring工廠讀取property配置文件示例代碼

    使用spring工廠讀取property配置文件示例代碼

    這篇文章主要介紹了使用spring工廠讀取property配置文件示例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Spring MVC實現(xiàn)的登錄攔截器代碼分享

    Spring MVC實現(xiàn)的登錄攔截器代碼分享

    這篇文章主要介紹了Spring MVC實現(xiàn)的登錄攔截器代碼分享,涉及攔截器的簡單介紹,攔截器和過濾器的區(qū)以及攔截器實現(xiàn)代碼等相關內(nèi)容,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • SpringBoot SSMP 整合案例分享

    SpringBoot SSMP 整合案例分享

    這篇文章主要介紹了SpringBoot SSMP 整合案例分享,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解Spring關于@Resource注入為null解決辦法

    詳解Spring關于@Resource注入為null解決辦法

    這篇文章主要介紹了詳解Spring關于@Resource注入為null解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • JavaWeb項目中springmvc和tomcat對靜態(tài)文件的處理

    JavaWeb項目中springmvc和tomcat對靜態(tài)文件的處理

    這篇文章主要介紹了JavaWeb項目中springmvc和tomcat對靜態(tài)文件的處理 的相關資料,需要的朋友可以參考下
    2016-07-07
  • 深入理解Java虛擬機 JVM 內(nèi)存結(jié)構(gòu)

    深入理解Java虛擬機 JVM 內(nèi)存結(jié)構(gòu)

    本節(jié)將會介紹一下JVM的內(nèi)存結(jié)構(gòu),JVM運行時數(shù)據(jù)區(qū)的各個組成部分:堆,方法區(qū),程序計數(shù)器,Java虛擬機棧,本地方法棧,還會對Java堆的分代劃分做個簡單的介紹
    2021-09-09
  • Java 抽象類詳解

    Java 抽象類詳解

    抽象類是用abstract關鍵字修飾的類,其核心作用是作為父類提供通用模板,同時強制子類實現(xiàn)特定方法,本文介紹Java 抽象類的相關知識,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java線程通訊的實現(xiàn)方法總結(jié)

    Java線程通訊的實現(xiàn)方法總結(jié)

    線程通訊指的是多個線程之間通過共享內(nèi)存或消息傳遞等方式來協(xié)調(diào)和同步它們的執(zhí)行,線程通訊的實現(xiàn)方式主要有以下兩種:共享內(nèi)存和消息傳遞,本文詳細介紹了Java線程是如何通訊的,感興趣的同學可以參考閱讀
    2023-05-05
  • Netty實現(xiàn)自定義協(xié)議編解碼器

    Netty實現(xiàn)自定義協(xié)議編解碼器

    這篇文章主要為大家介紹了Netty實現(xiàn)自定義協(xié)議編解碼器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • java對象持久化保存的方法詳解

    java對象持久化保存的方法詳解

    這篇文章主要介紹了java對象持久化保存的方法詳解,在java應用開發(fā)的過程中,經(jīng)常遇到需要持久保存java對象的情況,比如:用戶信息、博客評論內(nèi)容等等,本文針對java對象的持久化保存方法進行討論,簡述各個方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07

最新評論

大渡口区| 安阳市| 蓬安县| 垦利县| 根河市| 丹寨县| 宜黄县| 楚雄市| 长岛县| 平定县| 南宁市| 徐州市| 婺源县| 竹溪县| 丹凤县| 惠安县| 大港区| 金溪县| 靖宇县| 普陀区| 政和县| 吉林市| 罗山县| 武义县| 皮山县| 衡阳县| 临汾市| 伊金霍洛旗| 永川市| 成都市| 清远市| 盐城市| 海林市| 安仁县| 西贡区| 乾安县| 仁布县| 绍兴市| 内乡县| 梓潼县| 迭部县|