mp核心功能

條件構造器

mybatisPlus支持各種復雜的where條件, 滿足日常的開發

wrapper類就是條件構造器

提供了很多子類

條件構造器的用法:

  • QueryWrapper和LambdaQueryWrapper通常用來構建select、delete、update的where條件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set語句比較特殊才使用
  • 盡量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬編碼

自定義SQL

我們可以利用MyBatisPlus的Wrapper來構建復雜的Where條件,然后自己定義SQL語句中剩下的部分

① 基于Wrapper構建where條件

List<Long> ids = List.of(1L, 2L, 4L);
int amount = 200;
// 1.構建條件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
// 2.自定義SQL方法調用
userMapper.updateBalanceByIds(wrapper, amount);

② 在mapper方法參數中用Param注解聲明wrapper變量名稱,必須是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper, @Param("amount") int amount);

③ 自定義SQL,并使用Wrapper條件

<update id="updateBalanceByIds">UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>

service接口

接口使用流程:

1.自定義 Service 接口繼承 IService

  • 作用:讓自定義的 Service 接口具備 MP IService 中封裝的通用 CRUD(創建、讀取、更新、刪除 )等基礎方法,無需手動編寫簡單的增刪改查邏輯。
  • 代碼示例
// 自定義 IUserService 接口,繼承 MP 的 IService,泛型指定操作的實體類 User
public interface IUserService extends IService<User> { // 可在此擴展自定義業務方法,如復雜查詢、業務邏輯組合等
}

2.自定義 Service 實現類,繼承 ServiceImpl 并實現自定義接口

  • 作用ServiceImpl 類已經實現了 IService 接口的通用方法,繼承它后,自定義實現類可直接復用這些通用操作;同時實現自定義 IUserService 接口,保證接口方法的實現與自定義業務邏輯補充。
  • 代碼示例
// UserServiceImpl 實現類,繼承 ServiceImpl(需指定對應的 Mapper 接口和實體類),并實現 IUserService
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {// 若 IUserService 有自定義方法,在此實現;也可直接使用父類 ServiceImpl 繼承來的通用方法,如 save、update、remove、list 等
}

常見CURD:

新增

方法

作用

save(T)

保存單個實體對象到數據庫,返回是否成功(boolean 類型 )

saveBatch(Collection<T>)

批量保存實體對象集合,默認批次大小,返回操作結果

saveBatch(Collection<T>, int)

帶自定義批次大小的批量保存,靈活控制批量操作頻次

saveOrUpdateBatch(Collection<T>)

批量保存或更新,根據實體主鍵判斷,存在則更新、不存在則新增

saveOrUpdateBatch(Collection<T>, int)

自定義批次大小的批量保存或更新

saveOrUpdate(T)

單個實體的保存或更新,依據主鍵判斷操作類型

saveOrUpdate(T, Wrapper<T>)

結合條件的單個實體保存或更新,條件用于輔助判斷等場景

修改

方法

作用

updateById(T)

根據實體對象的主鍵更新對應記錄,更新非 null 字段

update(Wrapper<T>)

通過條件構造器 Wrapper 構建更新條件,更新符合條件的記錄(需配合 set 操作,一般在 Lambda 語法或自定義 SQL 里設置更新內容 )

update(T, Wrapper<T>)

指定實體對象(設置要更新的字段值 )和條件構造器 Wrapper(設置更新條件 ),更新符合條件的記錄

updateBatchById(Collection<T>)

批量根據主鍵更新實體對象集合,每條記錄更新非 null 字段

updateBatchById(Collection<T>, int)

自定義批次大小的批量主鍵更新

saveOrUpdate(T)

前面新增分類里也有,兼具保存或更新邏輯,依據主鍵判斷

查詢

方法

作用

getById(Serializable)

根據主鍵 ID 查詢單個實體對象

getOne(Wrapper<T>)

通過條件構造器 Wrapper 查詢單個實體,若結果超過一條會拋異常

getOne(Wrapper<T>, boolean)

帶是否拋出異常參數,結果多條時,false 則返回第一條

listByIds(Collection<? extends Serializable>)

根據主鍵 ID 集合,查詢對應的實體列表

listByMap(Map<String, Object>)

根據 Map 中的鍵值對(對應數據庫字段 - 值 )查詢實體列表

list(Wrapper<T>)

通過條件構造器 Wrapper 構建查詢條件,查詢符合條件的實體列表

list()

查詢對應實體類的全表數據列表

page(E, Wrapper<T>)

結合分頁參數 E(如 Page 對象 )和條件構造器 Wrapper,實現分頁查詢

page(E)

僅用分頁參數 E 進行全表分頁查詢

lambdaQuery()

獲取 Lambda 語法的查詢鏈 LambdaQueryChainWrapper,方便用 Lambda 表達式寫條件,如 service.lambdaQuery().eq(User::getId, 1).list()

lambdaQuery(T)

帶實體對象的 Lambda 查詢鏈,可基于實體初始值輔助構造條件

lambdaUpdate()

獲取 Lambda 語法的更新鏈 LambdaUpdateChainWrapper,用于便捷構建更新操作

刪除

方法

作用

removeById(Serializable)

根據主鍵 ID 刪除對應的實體記錄

removeById(Serializable, boolean)

帶是否邏輯刪除(若開啟邏輯刪除 )的參數,控制刪除行為

removeById(T)

通過實體對象(主要用主鍵 )刪除記錄

removeByMap(Map<String, Object>)

根據 Map 中的鍵值對(數據庫字段 - 值 )作為條件,刪除符合條件的記錄

remove(Wrapper<T>)

用條件構造器 Wrapper 構建刪除條件,刪除對應記錄

removeByIds(Collection<?>)

根據主鍵 ID 集合,批量刪除對應記錄

removeByIds(Collection<?>, boolean)

帶邏輯刪除控制參數的批量主鍵刪除

removeBatchByIds(Collection<?>)

批量刪除主鍵對應記錄,內部處理批次等邏輯

removeBatchByIds(Collection<?>, boolean)

帶邏輯刪除控制的批量主鍵刪除

removeBatchByIds(Collection<?>, int)

自定義批次大小、帶邏輯刪除控制的批量主鍵刪除

removeBatchByIds(Collection<?>, int, boolean)

更細粒度控制(批次大小、邏輯刪除 )的批量主鍵刪除

統計

方法

作用

count()

統計對應實體類全表的記錄總數

count(Wrapper<T>)

根據條件構造器 Wrapper 構建的條件,統計符合條件的記錄數量

分頁查詢

方法分類

方法簽名

功能說明

典型使用場景

分頁查詢

E page(E page, Wrapper<T> queryWrapper)

傳入分頁對象(如 Page )和 Wrapper 條件,實現帶條件的分頁查詢

分頁+條件(如年齡>25 歲)查詢用戶,同時獲取總條數、總頁數等分頁元數據

分頁查詢

E page(E page)

僅通過分頁對象(Page )做全表分頁,返回分頁結果(含數據+分頁信息)

對大數據量表(如系統操作日志)做全表分頁展示,按頁加載避免一次性查全表

列表查詢

方法分類

方法簽名

功能說明

典型使用場景

列表查詢

List<T> listByIds(Collection<? extends Serializable> ids)

根據主鍵集合批量查詢,傳入 ID 集合,返回對應實體列表

批量獲取指定 ID 的用戶信息,如 listByIds(Arrays.asList(1L, 2L, 3L))

列表查詢

List<T> listByMap(Map<String, Object> map)

Map 封裝簡單條件(字段名 - 值)查詢,返回實體列表

{"name": "張三", "age": 20} 查用戶,適配無需復雜條件的場景

列表查詢

List<T> list(Wrapper<T> queryWrapper)

結合 Wrapper(如 LambdaQueryWrapper )構建復雜條件查詢,返回列表

多條件組合(如年齡>18 且性別為男)查詢,滿足復雜業務篩選需求

列表查詢

List<T> list()

查詢對應實體類全表數據,返回所有記錄

加載數據量小的字典表(如狀態枚舉表)全量內容

Lambda 操作

方法分類

方法簽名

功能說明

典型使用場景

Lambda 操作

LambdaQueryChainWrapper<T> lambdaQuery()

獲取 Lambda 查詢鏈,支持鏈式調用+Lambda 表達式寫條件,簡化查詢構建

鏈式寫法:lambdaQuery().eq(User::getId, 1).like(User::getName, "張").list()

Lambda 操作

LambdaQueryChainWrapper<T> lambdaQuery(T entity)

基于傳入實體的初始值,結合 Lambda 鏈補充條件查詢

已有部分實體數據(如姓名),再疊加年齡條件:lambdaQuery(user).gt(User::getAge, 18).list()

Lambda 操作

LambdaUpdateChainWrapper<T> lambdaUpdate()

獲取 Lambda 更新鏈,用鏈式+Lambda 表達式定義更新字段和條件

鏈式更新:lambdaUpdate().set(User::getStatus, 1).eq(User::getId, 1).update()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93473.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pcm,msd調制解調仿真

PCM&#xff08;脈沖編碼調制&#xff09;和MSD&#xff08;多符號差分&#xff09;調制解調系統的MATLAB仿真代碼。 PCM (脈沖編碼調制) 仿真 %% PCM調制解調仿真 clear; clc; close all;% 參數設置 Fs 8000; % 采樣頻率 (Hz) t_duration 0.02; % 信號持續時間 (秒…

【網絡安全】信息網絡安全建設方案(WORD)

1.1 安全整體架構 1.2 安全建設拓撲 1.3 安全建設內容與目標 2.1 用戶側安全建設思路 2.2 用戶側安全建設拓撲 2.3 用戶側安全建設內容 2.3.1 PKI 升級改造 2.3.2 安全防護 2.3.3 安全檢測 2.3.4 安全管理 3.1 跨網安全訪問與交換平臺安全建設思…

微服務 01

微服務是一種軟件架構風格&#xff0c;它是以專注于單一職責的很多小型項目為基礎&#xff0c;組合出復雜的大型應用。 &#xff08;對應的是單體架構風格&#xff09; 一、認識微服務 1、單體架構 單體架構&#xff1a;將業務的所有功能集中在一個項目中開發&#xff0c;打…

20250726讓榮品的PRO-RK3566開發板使用TF卡啟動

20250726讓榮品的PRO-RK3566開發板使用TF卡啟動 2025/7/26 8:58緣起&#xff1a;需要升級 榮品的PRO-RK3566核心板的 底板上的FPGA程序。 由于沒有使用RK809的電量計功能&#xff0c;板子一上電就會被關機&#xff01;^_于是給生產線制作了一張TF卡/啟動卡&#xff0c;插到底板…

Selenium使用指南

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 概述selenium是網頁應用中最流行的自動化測試工具&#xff0c;可以用來做自動化測試或者瀏覽器爬蟲等。官網地址為&#xff1a;相對于另外一款web自動化測試工具QT…

[機緣參悟-235]:通過AI人工升級網絡的工作方式和特征理解人的思維方式

AI人工神經網絡通過模擬生物神經元連接機制、構建層級化特征提取結構&#xff0c;并結合數據驅動的學習方式&#xff0c;為理解人類思維方式提供了技術參照框架&#xff0c;但其本質仍是基于統計的模式匹配&#xff0c;與人類意識層面的思維存在根本差異。以下從其工作方式、基…

【C#補全計劃:類和對象(七)—— 重寫虛方法】

一、virtual和override1. 問題引入&#xff1a;使用里氏替換原則時&#xff0c;使用父類容器裝載子類對象&#xff0c;若不使用virtual和override而是使用new&#xff0c;當子類調用兩個類共有的方法時&#xff0c;調用的是父類的方法而不是子類的方法&#xff1a;using System…

TCPIP之常用協議

一、TCPIP之網絡支撐協議 1.ARP ARP是網絡層協議&#xff0c;在同一廣播域內&#xff0c;將IP地址解析成MAC地址. 1.1 無故ARP 請求型無故ARP 設備在網絡中不管是自動獲取ip地址還是手動配置ip地址&#xff0c;設備都會發送請求型無故ARP檢查這個ip地址是否有重復的。 應…

網絡之路24:VLAN基礎實驗

正文共&#xff1a;2345 字 18 圖&#xff0c;預估閱讀時間&#xff1a;3 分鐘目錄網絡之路第一章&#xff1a;Windows系統中的網絡0、序言1、Windows系統中的網絡 1.1、桌面中的網卡 1.2、命令行中的網卡 1.3、路由表 1.4、家用路由器網絡之路第二章&#xff1a;認識企業設備2…

基于Verilog的神經網絡加速器設計

本設計實現了一個高效的神經網絡加速器,專注于卷積神經網絡(CNN)的核心計算功能。該設計具有以下創新點: 并行處理架構:同時處理多個卷積窗口,提高計算吞吐量 動態權重加載:支持運行時更新卷積核權重 流水線優化:卷積、激活、池化三級流水線設計 可配置參數:支持不同尺寸…

基于springboot的零食商城的設計與實現/零食銷售系統的設計與實現

用戶&#xff1a;注冊&#xff0c;登錄&#xff0c;商品信息&#xff0c;團購商品&#xff0c;公告資訊&#xff0c;后臺管理&#xff0c;在線客服&#xff0c;購物車&#xff0c;個人中心管理員&#xff1a;登錄&#xff0c;個人中心&#xff0c;用戶管理&#xff0c;商品類型…

《劍指offer》-算法篇-位運算

題目二進制中“1”的個數代碼實現二進制中“1”的個數題目描述&#xff1a;輸入一個整數&#xff0c;輸出該數二進制表示中1的個數。其中負數用補碼表示。思路&#xff1a;求“1”的個數等價于求n-1與n進行“與”運算后不等于0所需要的運算次數。注意&#xff1a;這里的整數可能…

項目上線中的跨域問題

本文將深入解析跨域問題的本質&#xff0c;并提供實用的解決方案。引言 跨域問題可以說是前端開發者的"老朋友"了&#xff0c;特別是在項目從開發環境遷移到生產環境時&#xff0c;這個問題更是頻繁出現。許多開發者對跨域的理解停留在表面&#xff0c;導致在項目上線…

dubbo應用之3.0新特性(響應式編程)(2)

一、介紹 Dubbo 3.0 的響應式編程基于 Triple 協議和 Reactor/RxJava 實現,支持全鏈路異步非阻塞通信。它通過引入 Mono、Flux 等響應式類型,打通跨進程的數據流式傳輸,天然支持反壓、限流等控制能力。相比傳統基于 CompletableFuture 的異步方式,響應式編程更適用于高并發…

力扣-22.括號生成

題目鏈接 22.括號生成 class Solution {List<String> res new ArrayList<>();StringBuilder path new StringBuilder();void backtracking(int n, int left, int right) {if (left right 2 * n) {res.add(path.toString());return;}if (left < n) {path.a…

架構實戰——互聯網架構模板(“網絡層”技術)

目錄 一、負載均衡 1.1、DNS 1.1.1、DNS 負載均衡的優點 1.1.2、DNS 負載均衡的缺點 1.2、Nginx 、LVS 、F5 1.2.1、軟件和硬件的區別 1.2.2、4 層和 7 層的區別 二、CDN 三、多機房 3.1、同城多機房 3.2、跨城多機房 3.3、跨國多機房 四、多中心 本文來源:極客時間vip課程筆記…

TCP/IP 網絡編程面試題及解答

在Qt/C面試中&#xff0c;若涉及“熟悉TCP/IP網絡編程”&#xff0c;面試官通常會結合TCP/IP協議基礎、Qt網絡編程框架&#xff08;如Qt Network模塊&#xff09;、C網絡編程實現以及實際場景問題來提問。以下是常見面試題及解答&#xff1a; 一、TCP/IP協議基礎 1. TCP和UDP的…

unity開發中Hash、Queue、LinkedList簡單介紹

在Unity游戲開發中&#xff0c;除了Dictionary和List外&#xff0c;以下三種數據結構能高效解決特定問題場景&#xff1a;1. HashSet<T>&#xff1a;閃電級存在性檢查 核心特點&#xff1a;基于哈希表實現的高效集合&#xff0c;元素唯一且無視順序 優勢&#xff1a; O(1…

智慧園區:科技與生活的完美融合

在城市的喧囂中&#xff0c;我們常常渴望一片寧靜而充滿活力的綠洲。如今&#xff0c;隨著科技的飛速發展&#xff0c;智慧園區應運而生&#xff0c;它不僅滿足了我們對美好生活的向往&#xff0c;更以其獨特的魅力&#xff0c;成為現代城市中一道亮麗的風景線。今天&#xff0…

繼續打卡day6

383. 贖金信 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> us;for(auto c: ransomNote){us[c]; // 將字符串存儲}for(auto c: magazine){if(us.count(c)){us[c]-…