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

MyBatis中動(dòng)態(tài)SQL的使用指南

 更新時(shí)間:2024年09月26日 09:49:08   作者:不掉頭發(fā)的阿水  
MyBatis 是一個(gè)流行的持久層框架,它通過(guò) XML 或注解將接口方法與 SQL 映射在一起,動(dòng)態(tài) SQL 是 MyBatis 的一大特性,它使得構(gòu)建靈活的查詢變得簡(jiǎn)單,本文將通過(guò)一個(gè) User 表的示例,介紹 MyBatis 中常用的動(dòng)態(tài) SQL 方法,需要的朋友可以參考下

引言

MyBatis 是一個(gè)流行的持久層框架,它通過(guò) XML 或注解將接口方法與 SQL 映射在一起。動(dòng)態(tài) SQL 是 MyBatis 的一大特性,它使得構(gòu)建靈活的查詢變得簡(jiǎn)單。本文將通過(guò)一個(gè) User 表的示例,介紹 MyBatis 中常用的動(dòng)態(tài) SQL 方法。

1. 什么是動(dòng)態(tài) SQL?

動(dòng)態(tài) SQL 是指在運(yùn)行時(shí)構(gòu)建 SQL 語(yǔ)句,可以根據(jù)條件生成不同的 SQL 語(yǔ)句。這種方法在處理復(fù)雜查詢時(shí)尤為重要,可以有效避免 SQL 注入和冗余代碼。

2. 示例表:用戶表

我們以 User 表為例,表結(jié)構(gòu)如下:

//Lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
    private Long id;            // 用戶id
    private String username;    // 用戶名
    private String password;    // 密碼
    private String phone;       // 注冊(cè)手機(jī)號(hào)
    private String info;        // 詳細(xì)信息
    private Integer status;     // 使用狀態(tài)(1正常 2凍結(jié))
    private Integer balance;     // 賬戶余額
    private Date createTime;    // 創(chuàng)建時(shí)間
    private Date updateTime;    // 更新時(shí)間
}

3. 常用動(dòng)態(tài) SQL 方法

3.1 where

使用 where 標(biāo)簽可以自動(dòng)處理 SQL 條件前的 AND 和 OR。

<select id="findByConditions" resultType="com.lps.domain.User">
    SELECT * FROM user
    <where>
        <if test="username != null and username != ''">
            AND USERNAME LIKE CONCAT('%', #{username}, '%')
        </if>
        <if test="phone != null and phone != ''">
            AND PHONE LIKE CONCAT('%', #{phone}, '%')
        </if>
    </where>
</select>

3.2 foreach

foreach 標(biāo)簽用于處理集合,可以生成 IN 查詢。

<select id="findByIds" resultType="com.lps.domain.User">
    SELECT * FROM user WHERE id IN
    <foreach item="id" collection="idList" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

3.3 if

if 標(biāo)簽用于動(dòng)態(tài)決定是否包含某個(gè) SQL 片段。

<update id="updateUser">
    UPDATE user
    <set>
        <if test="username != null">username = #{username},</if>
        <if test="phone != null">phone = #{phone},</if>
    </set>
    WHERE id = #{id}
</update>

3.4 choose, when, otherwise

這些標(biāo)簽實(shí)現(xiàn)了類似 Java 中 switch 的功能。

<select id="findByStatus" resultType="com.lps.domain.User">
    SELECT * FROM user
    <where>
        <choose>
            <when test="status == 1">AND status = 1</when>
            <when test="status == 2">AND status = 2</when>
            <otherwise>AND status IS NULL</otherwise>
        </choose>
    </where>
</select>

3.5 trim

trim 標(biāo)簽可以去掉 SQL 語(yǔ)句開頭或結(jié)尾的特定字符。

<select id="findUsersWithTrim" resultType="com.lps.domain.User">
    SELECT * FROM user
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
        <if test="username != null">AND username = #{username}</if>
        <if test="phone != null">AND phone = #{phone}</if>
        <if test="status != null">AND status = #{status}</if>
    </trim>
</select>

3.6 bind

bind 標(biāo)簽用于在 SQL 查詢中動(dòng)態(tài)綁定變量,通常用于處理 LIKE 查詢時(shí)拼接通配符。下面是一個(gè)通過(guò) bind 實(shí)現(xiàn)模糊查詢的示例:

<select id="selectUserByLike" resultType="com.lps.domain.User">
    <bind name="username" value="'%' + username + '%'" />
    SELECT * FROM user
    WHERE username LIKE #{username}
</select>

在這個(gè)示例中,bind 標(biāo)簽將輸入的 username 動(dòng)態(tài)地拼接上 % 通配符,以支持模糊查詢。在查詢時(shí),MyBatis 會(huì)自動(dòng)將參數(shù) username 轉(zhuǎn)換為帶通配符的值并替換到 SQL 中,從而實(shí)現(xiàn)類似于 SQL 中 LIKE '%xxx%' 的效果(類似于3.1WHERE中用到的的CONCAT方法)

4. 總結(jié)

MyBatis 的動(dòng)態(tài) SQL 特性為開發(fā)者提供了強(qiáng)大的靈活性,使得構(gòu)建復(fù)雜查詢變得簡(jiǎn)單。通過(guò)合理使用動(dòng)態(tài) SQL,可以提高代碼的可讀性和維護(hù)性。本文介紹了常見的動(dòng)態(tài) SQL 標(biāo)簽和用法,包括 where、foreach、if、choose、trim 和 bind。 

以上就是MyBatis中動(dòng)態(tài)SQL的使用指南的詳細(xì)內(nèi)容,更多關(guān)于MyBatis動(dòng)態(tài)SQL使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    這篇文章主要介紹了Java的線程阻塞、中斷及優(yōu)雅退出方法詳解,Java中的線程阻塞是指當(dāng)一個(gè)線程無(wú)法繼續(xù)執(zhí)行時(shí),它會(huì)進(jìn)入阻塞狀態(tài),直到某個(gè)條件滿足后才能繼續(xù)執(zhí)行,線程阻塞可以通過(guò)多種方式實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10
  • Spring?Data?JPA?在?@Query?中使用投影的方法示例詳解

    Spring?Data?JPA?在?@Query?中使用投影的方法示例詳解

    這篇文章主要介紹了Spring?Data?JPA?在?@Query?中使用投影的方法,大家需要注意如果要在 @Query 中使用投影,必須要主動(dòng)聲明要查詢的字段,并且主動(dòng)寫明字段的別名才行,本文通過(guò)sql代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-07-07
  • SpringBoot最簡(jiǎn)潔的國(guó)際化配置

    SpringBoot最簡(jiǎn)潔的國(guó)際化配置

    這篇文章主要介紹了SpringBoot最簡(jiǎn)潔的國(guó)際化配置,Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用程序的框架,國(guó)際化是一個(gè)重要的功能,它允許應(yīng)用程序根據(jù)用戶的語(yǔ)言和地區(qū)顯示不同的內(nèi)容,在Spring Boot中,實(shí)現(xiàn)國(guó)際化非常簡(jiǎn)單,需要的朋友可以參考下
    2023-10-10
  • JAVA Comparator 和 Comparable接口使用方法

    JAVA Comparator 和 Comparable接口使用方法

    本文介紹了Java中Comparable和Comparator接口的使用,包括它們的定義、方法和應(yīng)用場(chǎng)景,Comparable用于定義類的自然排序規(guī)則,而Comparator提供了一種靈活的方式來(lái)定義對(duì)象之間的排序規(guī)則,無(wú)需修改類本身,感興趣的朋友一起看看吧
    2025-03-03
  • SpringMVC中@RequestMapping注解用法實(shí)例

    SpringMVC中@RequestMapping注解用法實(shí)例

    通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解

    關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解

    這篇文章主要介紹了關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解,請(qǐng)求的轉(zhuǎn)發(fā),是指服務(wù)器收到請(qǐng)求后,從一個(gè)服務(wù)器端資源跳轉(zhuǎn)到同一個(gè)服務(wù)器端另外一個(gè)資源的操作,需要的朋友可以參考下
    2023-05-05
  • 詳解MyBatis的Dao層實(shí)現(xiàn)和配置文件深入

    詳解MyBatis的Dao層實(shí)現(xiàn)和配置文件深入

    這篇文章主要為大家詳細(xì)介紹了MyBatis的Dao層實(shí)現(xiàn)和配置文件深入,文中的示例代碼講解詳細(xì),感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • Linux系統(tǒng)中檢查Java版本的三種高效方法

    Linux系統(tǒng)中檢查Java版本的三種高效方法

    本文介紹了在Linux系統(tǒng)中檢查Java版本的三種高效方法,并探討了Java版本的重要性及其檢查原因,通過(guò)了解Java版本格式和不同方法,用戶可以確保應(yīng)用的兼容性、性能和安全性,需要的朋友可以參考下
    2025-12-12
  • MyBatis Plus復(fù)合主鍵問(wèn)題的解決

    MyBatis Plus復(fù)合主鍵問(wèn)題的解決

    在數(shù)據(jù)庫(kù)設(shè)計(jì)中,有時(shí)候需要使用復(fù)合主鍵來(lái)唯一標(biāo)識(shí)表中的一行數(shù)據(jù),本文將為您詳細(xì)介紹MyBatis Plus中復(fù)合主鍵的問(wèn)題以及解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • JavaGUI事件監(jiān)聽機(jī)制超詳細(xì)講解

    JavaGUI事件監(jiān)聽機(jī)制超詳細(xì)講解

    Java事件監(jiān)聽器是由事件類和監(jiān)聽接口組成,自定義一個(gè)事件前,必須提供一個(gè)事件的監(jiān)聽接口以及一個(gè)事件類。JAVA中監(jiān)聽接口是繼承java.util.EventListener的類,事件類繼承java.util.EventObject的類
    2023-03-03

最新評(píng)論

建昌县| 安图县| 淳安县| 阳朔县| 南郑县| 沁阳市| 宁晋县| 田林县| 固原市| 邵武市| 余庆县| 凤城市| 普洱| 宁晋县| 浑源县| 聂拉木县| 贵港市| 商南县| 车险| 永州市| 东阳市| 南涧| 临海市| 玛多县| 巴彦淖尔市| 丰镇市| 米易县| 应城市| 正宁县| 集贤县| 郁南县| 德阳市| 洛隆县| 长岭县| 辰溪县| 汤阴县| 大荔县| 厦门市| 休宁县| 台南县| 屯留县|