深入解析Mybatis-Plus框架:簡化Java持久層開發(七)

🍀 前言

博客地址:

  • CSDN:https://blog.csdn.net/powerbiubiu

👋 簡介

本章節介紹如何通過Mybatis-Plus刪除數據庫中的數據。
本章節不需要前置準備,繼續使用之前的測試類,數據庫表進行操作。

📖 正文

1 Mapper接口

// 根據 entity 條件,刪除記錄
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 刪除(根據ID 批量刪除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根據 ID 刪除
int deleteById(Serializable id);
// 根據主鍵 ID 刪除 (傳入實體類)
int deleteById(T entity);
// 根據 columnMap 條件,刪除記錄
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

前面已經簡單介紹過int deleteById(Serializable id),這里不在介紹,int deleteById(T entity)的方式也比較簡單,這里也不再介紹。

1.1 deleteBatchIds

通過id批量進行刪除
需求:刪除id為4和5的角色信息

@Test
public void deleteByMapper() {List<Long> ids = new ArrayList<>();ids.add(4L);ids.add(5L);int i = roleMapper.deleteBatchIds(ids);System.out.println("批量刪除:" + i);
}// 批量刪除:2

實際執行的SQL

DELETE FROM tb_role WHERE id IN ( 4 , 5 )
1.2 delete

根據實體刪除
需求:刪除角色名稱為測試角色6號的角色

@Test
public void deleteByMapper() {LambdaQueryWrapper<Role> wrapper = new LambdaQueryWrapper<>();wrapper.eq(Role::getRoleName,"測試角色6號");int i = roleMapper.delete(wrapper);System.out.println("刪除:" + i);
}// 刪除:1

這里的條件構造器使用的是Lambda的方式,同時也可以用一下方式來寫

LambdaQueryWrapper<Role> wrapper = Wrappers.<Role>lambdaQuery().eq(Role::getRoleName, "測試角色6號");

實際執行的SQL

DELETE FROM tb_role WHERE (role_name = '測試角色6號')

通過執行代碼,我們可以知道第一個參數需要傳入實體類的字段,也就是對應數據庫的列名,第二個參數則是我們需要匹配的內容。

default Children eq(R column, Object val) {return this.eq(true, column, val);
}Children eq(boolean condition, R column, Object val);

根據分析源碼可以看出,兩個參數的eq方法調用了三個參數的eq方法,并第一個參數默認true,如果該值為false,那么表示該條件不加入生成的sql中,就只會執行DELETE FROM tb_role,不帶where的條件了,所以需要慎用,避免把數據給清空。

1.3 deleteByMap

根據列名刪除,多個之間為and關系
需求:刪除角色名稱為測試角色2號和角色編碼為TEST02的角色

@Test
public void deleteByMapper() {Map<String, Object> map = new HashMap<>();map.put("role_name", "測試角色2號");map.put("role_code", "TEST02");int i = roleMapper.deleteByMap(map);System.out.println("刪除:" + i);
}// 刪除:1

實際執行的SQL,我們就可以更好的理解deleteByMap的用途了

DELETE FROM tb_role WHERE role_name = '測試角色2號' AND role_code = 'TEST02'

當刪除的條件有一個不滿足的時候,結果則會返回0

2 Service接口

// 根據 queryWrapper 設置的條件,刪除記錄
boolean remove(Wrapper<T> queryWrapper);
// 根據 ID 刪除
boolean removeById(Serializable id);
// 根據 columnMap 條件,刪除記錄
boolean removeByMap(Map<String, Object> columnMap);
// 刪除(根據ID 批量刪除)
boolean removeByIds(Collection<? extends Serializable> idList);

因測試數據不夠用了,所以我們手動添加一下

INSERT INTO mpdemo.tb_role (id,role_name,role_code,description,create_time,update_time,is_deleted) VALUES(3,'測試角色2號','TEST02',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(4,'測試角色3號','TEST03',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(5,'測試角色4號','TEST04',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(6,'測試角色5號','TEST05',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(7,'測試角色6號','TEST06',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(8,'測試角色7號','TEST07',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0),(9,'測試角色8號','TEST08',NULL,'2023-12-21 15:46:28','2023-12-21 15:46:28',0);
2.1 remove

需求:刪除角色名稱為測試角色8號的角色

@Test
public void deleteByService() {LambdaQueryWrapper<Role> wrapper = Wrappers.<Role>lambdaQuery().eq(Role::getRoleName, "測試角色8號");boolean b = roleService.remove(wrapper);System.out.println("刪除:" + b);
}// 刪除:true

與Mapper接口不通的是,Service接口方法返回的是布爾值,而不是受影響的行數,如果該測試方法再執行一次,那么返回的結果就是刪除:false了,因為數據庫已經刪除了這條數據不存在了
實際執行的SQL

DELETE FROM tb_role WHERE (role_name = '測試角色8號')
2.2 removeByIds

根據id批量刪除
需求,刪除id為6,7的角色信息

@Test
public void deleteByService() {List<Long> ids = new ArrayList<>();ids.add(6L);ids.add(7L);boolean b = roleService.removeByIds(ids);System.out.println("批量刪除:" + b);
}// 批量刪除:true

實際執行的SQL

DELETE FROM tb_role WHERE id IN ( 6 , 7 )

如何批量刪除id為7(不存在)8(存在)的時候,返回的結果任然為true,并不會應該某個id不存在就返回false

2.2 removeByMap

根據列名刪除,多個之間為and關系
需求:刪除角色名稱為測試角色4號和角色編碼為TEST04的角色

@Test
public void deleteByService() {Map<String, Object> map = new HashMap<>();map.put("role_name", "測試角色4號");map.put("role_code", "TEST04");boolean b = roleService.removeByMap(map);System.out.println("刪除:" + b);
}// 刪除:true

實際執行的SQL

DELETE FROM tb_role WHERE role_name = '測試角色4號' AND role_code = 'TEST04'

當刪除的條件有一個不滿足的時候,結果則會返回false

? 總結

💖 歡迎關注我的公眾號

在這里插入圖片描述

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

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

相關文章

一文詳解mysql 的鎖

MySQL鎖是用于管理數據庫中的并發操作的一種機制&#xff0c;它可以確保數據的一致性和完整性。 按范圍劃分&#xff1a;包括全局鎖、表級鎖、頁級鎖和行級鎖。 按類型劃分&#xff1a;包括間隙鎖、臨鍵鎖和記錄鎖。 按級別劃分&#xff1a;包括共享鎖&#xff08;S鎖&#xff…

如何在Windows輕量應用服務器上安裝和配置SSH?

如何在Windows輕量應用服務器上安裝和配置SSH&#xff1f; 檢查OpenSSH的可用性&#xff1a;首先&#xff0c;需要以管理員身份打開PowerShell并運行命令Get-WindowsCapability - Online | Where-Object Name - like OpenSSH*來檢查OpenSSH服務是否可用。如果服務未啟動或不可…

day03_Vue_Element

文章目錄 01.Ajax1.1 Ajax 概述1.2 同步異步1.3 原生Ajax 2. Axios2.1 Axios的基本使用2.2 Axios快速入門2.3請求方法的別名2.4 案例 3 前后臺分離開發3.1 前后臺分離開發介紹 04 YAPI4.1 YAPI介紹4.2 接口文檔管理 05 前端工程化5.1 前端工程化介紹5.2 前端工程化入門5.2.1 環…

【Python】變量的引用

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介紹&#xff1a;"謓澤"正在路上朝著"攻城獅"方向"前進四" &#x1f50e;&#x1f3c5; 榮譽&#xff1a;2021|2022年度博客之星物聯網與嵌入式開發TOP5|TOP4、2021|2222年獲評…

2024.3.4 作業

1、流式域套接字 1>tcp服務端實現 #include<myhead.h> int main(int argc, const char *argv[]) {//1、創建套接字int sfd socket(AF_UNIX, SOCK_STREAM, 0);if(sfd -1){perror("socket error");return -1;}//2、判斷套接字文件是否存在&#xff0c;如果…

5G工業智能網關保障煤礦安全生產

隨著物聯網技術發展與煤礦需求的持續激增&#xff0c;礦山礦井的分布范圍廣泛、戶外環境惡劣等管理問題急需解決&#xff0c;而物聯網網關工業級設計能夠無懼惡劣環境干擾&#xff0c;輕松解決戶外網絡部署問題。 工業網關通過采集礦井內的各類傳感器數據對礦井進行遠程監控&a…

MySQL中的大表優化方案

當MySQL單表記錄數過大時&#xff0c;數據庫的CRUD性能會明顯下降&#xff0c;一些常見的優化措施如下&#xff1a; 1&#xff1a;限定數據的范圍 務必禁止不帶任何限制數據范圍條件的查詢語句。比如&#xff1a;我們當用戶在查詢訂單歷史的時候&#xff0c;我們可以控制在一個…

【NR 定位】3GPP NR Positioning 5G定位標準解讀(五)

前言 3GPP 標準網址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位標準解讀&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位標準解讀&#xff08;二&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位…

[GYCTF2020]EasyThinking --不會編程的崽

看標題就知道&#xff0c;這大概率是關于thinkphp的題目。先嘗試錯誤目錄使其報錯查看版本號 thinkphp v6.0.0&#xff0c;在網上搜索一下&#xff0c;這個版本有一個任意文件上傳漏洞。參考以下文章。 https://blog.csdn.net/god_zzZ/article/details/104275241 先注冊一個賬…

VL53L8CX驅動開發(1)----驅動TOF進行區域檢測

VL53L8CX驅動開發----1.驅動TOF進行區域檢測 概述視頻教學樣品申請源碼下載主要特點硬件準備技術規格系統框圖應用示意圖區域映射生成STM32CUBEMX選擇MCU 串口配置IIC配置LPn 設置X-CUBE-TOF1串口重定向代碼配置Tera Term配置演示結果 概述 VL53L8CX是一款8x8多區域ToF測距傳感…

STM32(6)中斷

1.中斷 1.1 中斷的概念 STM32的中斷&#xff1a; 1.2 中斷優先級 用數字的大小表示中斷優先級的高低&#xff0c;數字的范圍&#xff1a;0000--1111&#xff08;二進制&#xff09;&#xff0c;即0-15&#xff0c;共16級優先級。 進一步對這4位二進制數進行劃分&#xff0c;可…

demo型xss初級靶場

一、環境 XSS Game - Ma Spaghet! | PwnFunction 二、開始闖關 第一關 看看代碼 試一下直接寫 明顯進來了為什么不執行看看官方文檔吧 你不執行那我就更改單標簽去使用唄 ?somebody<img%20src1%20onerror"alert(1)"> 防御&#xff1a; innerText 第二關…

區塊鏈技術深度賦能多元行業應用的全景解析

隨著科技的日新月異&#xff0c;區塊鏈這一顛覆性技術正以前所未有的速度從理論走向實踐&#xff0c;并在眾多行業中扮演著關鍵性的變革角色。其獨特的分布式賬本、去中心化運作、公開透明以及數據不可篡改等核心特性&#xff0c;為金融、物聯網&#xff08;IoT&#xff09;、供…

常見的排序算法-(字解版)

快速排序算法 例如&#xff1a;3 1 2 7 5 6 第一次基數&#xff1a; 3 [] 1 2 7 5 6 3 和 6 5 7 比都比 3 大 &#xff0c; 位置不變 [] 1 2 7 5 63 和 2 比 &#xff0c;大于 2 放在右邊。 2 1 [] 7 5 63 和 1 比 &#xff0c;大于 1 位置不變。 2 1 3 7 5 6 把 3 的左邊和右…

分賬系統哪個好 盤點2024年好用的四款分賬系統

分賬系統在現代商業活動中扮演著至關重要的角色&#xff0c;為企業提供了高效、準確的分賬管理。那么&#xff0c;你知道2024年哪幾款分賬系統最好用呢&#xff1f;跟著小編的腳步去看看吧&#xff01; 一、商淘云 商淘云是廣州商淘信息科技有限公司旗下品牌&#xff0c;它提…

SPI是什么?

SPI是“串行外設接口”&#xff08;Serial Peripheral Interface&#xff09;的縮寫&#xff0c;它是一種高速的、全雙工、同步的通信協議&#xff0c;主要用于芯片與外設之間進行高速數據交換。SPI通信協議通常由一個主設備和一個或多個從設備組成。其核心是主設備控制時鐘信號…

ShardingJdbc分庫分表-淺談分表原理

文章目錄 為什么要分庫分表一、分庫分表二、不停機分庫分表數據遷移 為什么要分庫分表 一般的機器&#xff08;4核16G&#xff09;&#xff0c;單庫的MySQL并發&#xff08;QPSTPS&#xff09;超過了2k&#xff0c;系統基本就完蛋了。最好是并發量控制在1k左右。這里就引出一個…

matplotlib從起點出發(14)_Tutorial_imshow_origin_extent

0 總述 imshow()允許你將圖像&#xff08;將進行顏色映射——基于norm和cmap——的2D數組或將按原樣使用的3D RGB(A)的數組&#xff09;渲染到數據空間中的矩形區域。最終渲染中圖像的方向由原點和范圍關鍵字參數&#xff08;以及生成的AxesImage實例上的屬性&#xff09;和Ax…

一.數據分析簡介

目錄 一、了解數據分析 1.1 什么是數據分析 1.2 數據分析的重要性 1.3 數據分析的基本流程 數據獲取 數據處理 1.4 數據分析的應用場景 客戶分析 營銷分析 二、數據分析工具 jupyter 2.1 編輯器安裝 2.2 Jupyter快捷使用 一、了解數據分析 學習數據分析&#xff0…

[激光原理與應用-75]:激光器設計過程中,功率下降的主要原因大全

目錄 前言&#xff1a;激光器的本質是“電”轉“光”的設備 一、激光器功率下降的原因 二、壽命到期導致功率下降的因素 三、光損耗導致激光器輸出功率下降的因素 四、激光器中的能量轉化不完全導致的功率下降的因素 五、溫度變化導致激光器功率下降的影響因素 六、材料…