亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

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

動態(tài) SQL 是指在運(yùn)行時(shí)構(gòu)建 SQL 語句,可以根據(jù)條件生成不同的 SQL 語句。這種方法在處理復(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;       // 注冊手機(jī)號
    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. 常用動態(tài) SQL 方法

3.1 where

使用 where 標(biāo)簽可以自動處理 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)簽用于動態(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 語句開頭或結(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 查詢中動態(tài)綁定變量,通常用于處理 LIKE 查詢時(shí)拼接通配符。下面是一個(gè)通過 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 動態(tài)地拼接上 % 通配符,以支持模糊查詢。在查詢時(shí),MyBatis 會自動將參數(shù) username 轉(zhuǎn)換為帶通配符的值并替換到 SQL 中,從而實(shí)現(xiàn)類似于 SQL 中 LIKE '%xxx%' 的效果(類似于3.1WHERE中用到的的CONCAT方法)

4. 總結(jié)

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

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

相關(guān)文章

  • Mybatis配置映射文件中parameterType的用法講解

    Mybatis配置映射文件中parameterType的用法講解

    這篇文章主要介紹了Mybatis配置映射文件中parameterType的用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解Maven環(huán)境的搭建與idea配置

    詳解Maven環(huán)境的搭建與idea配置

    本篇文章主要介紹了詳解Maven環(huán)境的搭建與idea配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java interceptor攔截器的方法

    Java interceptor攔截器的方法

    java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可使開發(fā)者在一個(gè)Action執(zhí)行的先后執(zhí)行一段代碼,也能夠在一個(gè)Action,接下來通過本文給大家介紹Java interceptor攔截器的方法,感興趣的朋友一起看看吧
    2022-01-01
  • 實(shí)現(xiàn)一個(gè)基于Servlet的hello world程序詳解步驟

    實(shí)現(xiàn)一個(gè)基于Servlet的hello world程序詳解步驟

    Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序之間的中間層
    2022-02-02
  • maven profile實(shí)現(xiàn)多環(huán)境配置的示例

    maven profile實(shí)現(xiàn)多環(huán)境配置的示例

    這篇文章主要介紹了maven profile實(shí)現(xiàn)多環(huán)境配置的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))

    springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))

    這篇文章主要介紹了springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java數(shù)組遍歷 刪除remove(示例代碼)

    java數(shù)組遍歷 刪除remove(示例代碼)

    java數(shù)組遍歷 刪除remove。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Java編程思想對象的容納實(shí)例詳解

    Java編程思想對象的容納實(shí)例詳解

    這篇文章主要介紹了Java編程思想對象的容納實(shí)例詳解,內(nèi)容比較詳細(xì),涵蓋的東西也比較多,具有參考價(jià)值,需要的朋友了解下。
    2017-09-09
  • break在scala和java中的區(qū)別解析

    break在scala和java中的區(qū)別解析

    這篇文章主要介紹了break在scala和java中的區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • springboot實(shí)現(xiàn)后臺上傳圖片(工具類)

    springboot實(shí)現(xiàn)后臺上傳圖片(工具類)

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)后臺上傳圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論