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

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)建靈活的查詢(xún)變得簡(jiǎn)單,本文將通過(guò)一個(gè) User 表的示例,介紹 MyBatis 中常用的動(dòng)態(tài) SQL 方法,需要的朋友可以參考下

引言

MyBatis 是一個(gè)流行的持久層框架,它通過(guò) XML 或注解將接口方法與 SQL 映射在一起。動(dòng)態(tài) SQL 是 MyBatis 的一大特性,它使得構(gòu)建靈活的查詢(xún)變得簡(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ù)雜查詢(xún)時(shí)尤為重要,可以有效避免 SQL 注入和冗余代碼。

2. 示例表:用戶(hù)表

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

//Lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
    private Long id;            // 用戶(hù)id
    private String username;    // 用戶(hù)名
    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;     // 賬戶(hù)余額
    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 查詢(xún)。

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

4. 總結(jié)

MyBatis 的動(dòng)態(tài) SQL 特性為開(kāi)發(fā)者提供了強(qiáng)大的靈活性,使得構(gòu)建復(fù)雜查詢(xún)變得簡(jiǎn)單。通過(guò)合理使用動(dòng)態(tài) SQL,可以提高代碼的可讀性和維護(hù)性。本文介紹了常見(jiàn)的動(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)文章

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

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

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

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

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

    Java interceptor攔截器的方法

    java里的攔截器是動(dòng)態(tài)攔截Action調(diào)用的對(duì)象,它提供了一種機(jī)制可使開(kāi)發(fā)者在一個(gè)Action執(zhí)行的先后執(zhí)行一段代碼,也能夠在一個(gè)Action,接下來(lái)通過(guò)本文給大家介紹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ù)器上的程序,它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶(hù)端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(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)境配置的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • springboot對(duì)接支付寶支付接口(詳細(xì)開(kāi)發(fā)步驟總結(jié))

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

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

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

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

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

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

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

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

    springboot實(shí)現(xiàn)后臺(tái)上傳圖片(工具類(lèi))

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

最新評(píng)論