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

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 語句(包含 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 無條件,${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í),極大簡化動(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中程序的運(yùn)行全過程

    Java中程序的運(yùn)行全過程

    這篇文章主要介紹了Java中程序的運(yùn)行全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java compare compareTo方法區(qū)別詳解

    java compare compareTo方法區(qū)別詳解

    本文主要介紹了java compare compareTo方法區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java并發(fā)編程必備之Future機(jī)制

    Java并發(fā)編程必備之Future機(jī)制

    今天給大家?guī)淼氖顷P(guān)于Java并發(fā)編程的相關(guān)知識(shí),文章圍繞著Java Future機(jī)制展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 如何通過Java實(shí)現(xiàn)加密、解密Word文檔

    如何通過Java實(shí)現(xiàn)加密、解密Word文檔

    這篇文章主要介紹了如何通過Java實(shí)現(xiàn)加密、解密Word文檔,對(duì)一些重要文檔,常需要對(duì)文件進(jìn)行加密,查看文件時(shí),需要正確輸入密碼才能打開文件。下面介紹了一種比較簡單的方法給Word文件加密以及如何給已加密的Word文件解除密碼保護(hù),需要的朋友可以參考下
    2019-07-07
  • Java中的泛型方法詳解及簡單實(shí)例

    Java中的泛型方法詳解及簡單實(shí)例

    這篇文章主要介紹了Java中的泛型方法詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    前段時(shí)間一直使用到word文檔轉(zhuǎn)pdf或者pdf轉(zhuǎn)word,尋思著用Java應(yīng)該是可以實(shí)現(xiàn)的,于是花了點(diǎn)時(shí)間寫了個(gè)文件轉(zhuǎn)換工具,感興趣的可以了解一下
    2023-01-01
  • IDEA連接postgressql數(shù)據(jù)庫操作

    IDEA連接postgressql數(shù)據(jù)庫操作

    這篇文章主要介紹了IDEA連接postgressql數(shù)據(jù)庫操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java中文件讀寫操作與常用技巧分享

    Java中文件讀寫操作與常用技巧分享

    在 Java I/O 體系中,F(xiàn)ile 類是唯一代表磁盤文件本身的對(duì)象,而File 類定義了一些與平臺(tái)無關(guān)的方法來操作文件,所以下面我們一起來看看 File 類有哪些操作方法吧
    2023-06-06
  • 基于java實(shí)現(xiàn)簡單的圖片類別識(shí)別

    基于java實(shí)現(xiàn)簡單的圖片類別識(shí)別

    這篇文章主要為大家詳細(xì)介紹了如何基于java實(shí)現(xiàn)簡單的圖片類別識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Spring框架整合Java Web Token問題

    Spring框架整合Java Web Token問題

    這篇文章主要介紹了Spring框架整合Java Web Token問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評(píng)論

海南省| 大城县| 山丹县| 江达县| 北流市| 阿鲁科尔沁旗| 扎鲁特旗| 福海县| 河北区| 肥东县| 敦煌市| 新巴尔虎左旗| 屯留县| 湘西| 汝南县| 普安县| 瑞安市| 庆云县| 合水县| 天全县| 武功县| 海盐县| 阿拉善右旗| 外汇| 兰考县| 宜章县| 渭南市| 亚东县| 通化市| 孟村| 东乡| 河北区| 米泉市| 南城县| 西城区| 礼泉县| 沙坪坝区| 孟村| 红原县| 乌兰浩特市| 廊坊市|