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

MyBatis-Plus中使用Wrapper自定義SQL的詳細(xì)步驟

 更新時(shí)間:2025年07月11日 10:55:32   作者:野犬寒鴉  
在 MyBatis-Plus 中使用 Wrapper 自定義 SQL 可以靈活組合條件并復(fù)用條件邏輯,通過 ${ew.customSqlSegment} 占位符注入 Wrapper 生成的 SQL 片段,本文給大家介紹了詳細(xì)步驟和示例,需要的朋友可以參考下

核心步驟

  • Mapper 接口定義方法 使用 @Param("ew") 注解聲明 Wrapper 參數(shù),在 SQL 中通過 ${ew.customSqlSegment} 引用條件。
  • XML 或注解編寫 SQL 在 SQL 中嵌入 ${ew.customSqlSegment},MyBatis-Plus 會(huì)自動(dòng)替換為 Wrapper 生成的 WHERE 語(yǔ)句(包含 WHERE 關(guān)鍵字)。
  • Wrapper 構(gòu)建條件 使用 QueryWrapper/LambdaQueryWrapper 組裝條件,注意字段名與 SQL 中的別名一致。

示例一:XML 方式實(shí)現(xiàn)自定義 SQL

1. Mapper 接口聲明

public interface UserMapper extends BaseMapper<User> {
    // 使用 @Param("ew") 定義 Wrapper 參數(shù)
    List<User> selectUserList(@Param("ew") Wrapper<User> wrapper);
}

2. XML 映射文件(如 UserMapper.xml)

<select id="selectUserList" resultType="User">
    SELECT id, name, age, email 
    FROM user 
    ${ew.customSqlSegment} <!-- 自動(dòng)注入 WHERE 及條件 -->
</select>

3. 使用 Wrapper 構(gòu)建查詢

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "張")       // 模糊查詢 name 包含"張"
       .gt("age", 20)            // age > 20
       .orderByDesc("create_time"); // 按創(chuàng)建時(shí)間倒序
 
List<User> users = userMapper.selectUserList(wrapper);

生成的 SQL:

SELECT id, name, age, email 
FROM user 
WHERE name LIKE '%張%' AND age > 20 
ORDER BY create_time DESC

示例二:注解方式實(shí)現(xiàn)自定義 SQL

Mapper 接口直接寫 SQL

@Select("SELECT * FROM user ${ew.customSqlSegment}")
List<User> selectByWrapper(@Param("ew") Wrapper<User> wrapper);

示例三:聯(lián)表查詢 + Wrapper

1. Mapper 接口

List<UserVO> selectUserWithRole(@Param("ew") Wrapper<User> wrapper);

2. XML 映射文件

<select id="selectUserWithRole" resultType="UserVO">
    SELECT u.*, r.role_name 
    FROM user u
    LEFT JOIN role r ON u.role_id = r.id
    ${ew.customSqlSegment} <!-- 注入條件 -->
</select>

3. 使用 LambdaWrapper(避免硬編碼字段名)

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "王")     // 使用實(shí)體類方法引用
       .eq(User::getStatus, 1)        // status = 1
       .nested(i -> i.gt(User::getAge, 18).or().isNotNull(User::getEmail)); // 嵌套條件
 
List<UserVO> list = userMapper.selectUserWithRole(wrapper);

生成的 SQL:

SELECT u.*, r.role_name 
FROM user u 
LEFT JOIN role r ON u.role_id = r.id 
WHERE (
    name LIKE '%王%' 
    AND status = 1 
    AND (age > 18 OR email IS NOT NULL)
)

注意事項(xiàng)

  • 防止 SQL 注入 ${ew.customSqlSegment} 內(nèi)部使用預(yù)編譯安全處理,但避免在 SQL 中直接拼接 ${xxx}(除 MyBatis-Plus 官方占位符外)。
  • 表別名問題 若 SQL 中使用別名(如 u.name),Wrapper 條件需同步聲明別名:
wrapper.like("u.name", "張"); // XML 中表別名為 u
  • 空 Wrapper 處理 若 Wrapper 無(wú)條件,${ew.customSqlSegment} 生成空字符串,SQL 仍合法。
  • 復(fù)雜 SQL 場(chǎng)景 如需分組、聚合函數(shù)等,直接在 SQL 中編寫,Wrapper 僅負(fù)責(zé) WHERE 條件部分。

總結(jié)

  • 核心占位符${ew.customSqlSegment} 注入動(dòng)態(tài)條件。
  • 條件構(gòu)造:通過 QueryWrapper 或 LambdaWrapper 構(gòu)建樹狀條件(支持 and/or 嵌套)。
  • 安全機(jī)制:MyBatis-Plus 自動(dòng)處理參數(shù)預(yù)編譯,防止注入風(fēng)險(xiǎn)。

此方案完美契合 MyBatis-Plus 設(shè)計(jì)哲學(xué),在保留原生 MyBatis 靈活性的同時(shí),極大簡(jiǎn)化動(dòng)態(tài) SQL 編寫。

以上就是MyBatis-Plus中使用Wrapper自定義SQL的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于MyBatis-Plus Wrapper自定義SQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java的前期綁定和后期綁定使用示例

    java的前期綁定和后期綁定使用示例

    java的前期綁定在程序執(zhí)行前根據(jù)編譯時(shí)類型綁定,調(diào)用開銷較小,如C語(yǔ)言只有前期綁定這種方法調(diào)用
    2014-02-02
  • SpringBoot后臺(tái)使用EasyExcel實(shí)現(xiàn)數(shù)據(jù)報(bào)表導(dǎo)出(含模板、樣式、美化)

    SpringBoot后臺(tái)使用EasyExcel實(shí)現(xiàn)數(shù)據(jù)報(bào)表導(dǎo)出(含模板、樣式、美化)

    在企業(yè)級(jí)系統(tǒng)中,數(shù)據(jù)導(dǎo)出 Excel 是非常常見的需求,本文基于實(shí)際項(xiàng)目經(jīng)驗(yàn),分享如何使用 EasyExcel 實(shí)現(xiàn)復(fù)雜報(bào)表導(dǎo)出,包含支持按天/按小時(shí)導(dǎo)出數(shù)據(jù)、支持多 Sheet、多段寫入等,下面小編給大家詳細(xì)說(shuō)說(shuō),需要的朋友可以參考下
    2025-05-05
  • java實(shí)現(xiàn)打磚塊游戲算法

    java實(shí)現(xiàn)打磚塊游戲算法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)打磚塊游戲算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java類比C++的STL庫(kù)詳解

    java類比C++的STL庫(kù)詳解

    這篇文章主要介紹了java類比C++的STL庫(kù)詳解,標(biāo)準(zhǔn)模板庫(kù),是C++標(biāo)準(zhǔn)庫(kù)的重要組成部分,中文可譯為標(biāo)準(zhǔn)模板庫(kù)或者泛型庫(kù),其包含有大量的模板類和模板函數(shù),STL 是一些容器、算法和其他一些組件的集合,需要的朋友可以參考下
    2023-08-08
  • SpringMVC注解之@ResponseBody注解原理

    SpringMVC注解之@ResponseBody注解原理

    今天帶大家分析一下@ResponseBody注解原理,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Spring Security登錄接口兼容JSON格式登錄實(shí)現(xiàn)示例

    Spring Security登錄接口兼容JSON格式登錄實(shí)現(xiàn)示例

    前后端分離中,前端和后端的數(shù)據(jù)交互通常是JSON格式,本文主要介紹了Spring Security登錄接口兼容JSON格式登錄實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Springboot中集成Swagger2框架的方法

    Springboot中集成Swagger2框架的方法

    這篇文章主要介紹了Springboot中集成Swagger2框架的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 解決mybatis映射結(jié)果集失效的問題

    解決mybatis映射結(jié)果集失效的問題

    這篇文章主要介紹了解決mybatis映射結(jié)果集失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-11-11
  • Java中i++的一些問題總結(jié)

    Java中i++的一些問題總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中i++的一些問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java實(shí)現(xiàn)DES加密與解密,md5加密以及Java實(shí)現(xiàn)MD5加密解密類

    Java實(shí)現(xiàn)DES加密與解密,md5加密以及Java實(shí)現(xiàn)MD5加密解密類

    這篇文章主要介紹了Java實(shí)現(xiàn)DES加密與解密,md5加密以及Java實(shí)現(xiàn)MD5加密解密類 ,需要的朋友可以參考下
    2015-11-11

最新評(píng)論