MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中實現業務邏輯層??

全文目錄:

    • 開篇語
    • 前言
    • 1. MyBatis-Plus 的 `IService` 接口
      • 1.1 基本使用
        • 示例:創建實體類 `User` 和 `UserService`
        • 1.2 創建 `IService` 接口
        • 1.3 創建 `ServiceImpl` 類
      • 1.4 典型的數據庫操作方法
        • 1.4.1 `save()`:保存數據
        • 1.4.2 `remove()`:刪除數據
        • 1.4.3 `updateById()`:根據 ID 更新數據
        • 1.4.4 `list()`:查詢所有數據
        • 1.4.5 `page()`:分頁查詢
      • 1.5 自定義業務方法
        • 示例:添加自定義業務方法
    • 2. MyBatis-Plus Service 層的高級用法
      • 2.1 條件構造器 `QueryWrapper`
      • 2.2 更新和刪除的條件構造
      • 2.3 分頁查詢
      • 2.4 批量操作
    • 3. 小結
    • 文末

開篇語

哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云/阿里云/華為云/51CTO;歡迎大家常來逛逛

??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。

??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。

小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!

前言

MyBatis-Plus(簡稱 MP)是 MyBatis 的增強工具,它簡化了 MyBatis 的開發過程,提供了很多常用的功能封裝。Service 層是常見的業務邏輯層,主要負責對外提供操作數據庫的接口,并在該層實現具體的業務邏輯。MyBatis-Plus 提供了 IService 接口和一些封裝好的方法來幫助開發者實現數據層與業務層的交互,簡化代碼的編寫。

本文將深入探討如何使用 MyBatis-Plus 提供的 Service 接口來簡化開發,詳細講解其基本用法、常見功能以及如何擴展和自定義業務邏輯。

1. MyBatis-Plus 的 IService 接口

MyBatis-Plus 為業務邏輯層提供了 IService 接口,該接口包含了很多常用的數據庫操作方法。IService 接口通過泛型來操作具體的實體類,常用的方法包括:save()remove()update()list()page() 等。

1.1 基本使用

首先,我們需要創建一個繼承 IService 接口的服務接口和實現類。

示例:創建實體類 UserUserService
// 實體類 User
public class User {private Long id;private String name;private Integer age;private String email;// Getters and setters
}
1.2 創建 IService 接口
import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {// 可以在這里添加一些自定義的業務方法
}

UserService 繼承了 IService<User>IService 提供了一些常用的方法,例如 save(), updateById(), removeById() 等方法,UserService 類不需要實現這些方法,MyBatis-Plus 會自動為我們提供實現。

1.3 創建 ServiceImpl
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 這里可以添加自己的業務方法
}

ServiceImpl 是 MyBatis-Plus 提供的一個基礎實現類,它實現了 IService 接口的所有方法。我們通過繼承 ServiceImpl 來獲得對常見方法的支持,并且可以在 UserServiceImpl 中添加自定義業務邏輯。

1.4 典型的數據庫操作方法

IService 接口中,有許多已經實現的方法,這些方法極大地簡化了我們常見的 CRUD 操作。以下是幾個常用的方法:

1.4.1 save():保存數據

save() 方法用于保存一個實體對象,如果對象中存在主鍵,則會根據主鍵判斷是插入數據還是更新數據。

User user = new User();
user.setName("Tom");
user.setAge(25);
user.setEmail("tom@example.com");userService.save(user);
1.4.2 remove():刪除數據

remove() 方法根據條件刪除數據。可以根據 Wrapper 來定義刪除條件。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
userService.remove(queryWrapper);
1.4.3 updateById():根據 ID 更新數據

updateById() 方法用于根據主鍵更新數據。

User user = new User();
user.setId(1L);
user.setName("Jerry");
user.setAge(26);userService.updateById(user);
1.4.4 list():查詢所有數據

list() 方法用于查詢所有數據。

List<User> users = userService.list();
1.4.5 page():分頁查詢

page() 方法支持分頁查詢,需要傳入 Page 對象和查詢條件。

Page<User> page = new Page<>(1, 10);  // 第 1 頁,每頁 10 條數據
Page<User> userPage = userService.page(page);
System.out.println(userPage.getRecords());  // 獲取查詢的記錄

1.5 自定義業務方法

Service 接口中,除了繼承 IService 接口提供的默認方法外,我們還可以根據業務需求添加自定義的方法。例如,假設我們需要實現一個根據年齡查詢用戶的業務邏輯,可以在 UserService 接口中定義自定義方法,并在 UserServiceImpl 類中實現。

示例:添加自定義業務方法
public interface UserService extends IService<User> {List<User> getUsersByAge(int age);
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic List<User> getUsersByAge(int age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", age);return this.list(queryWrapper);}
}

UserServiceImpl 中,我們通過 QueryWrapper 來封裝查詢條件,然后調用 MyBatis-Plus 提供的 list() 方法來查詢符合條件的數據。

2. MyBatis-Plus Service 層的高級用法

除了常見的 CRUD 操作,MyBatis-Plus 的 IService 還提供了一些高級功能,幫助我們進行復雜的查詢、分頁、條件構造等操作。

2.1 條件構造器 QueryWrapper

QueryWrapper 是 MyBatis-Plus 提供的條件構造器,能夠幫助我們更加靈活地構建查詢條件。你可以通過 QueryWrapper 來添加各種條件、排序和分頁操作。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25).like("name", "T");
List<User> users = userService.list(queryWrapper);

2.2 更新和刪除的條件構造

除了查詢,QueryWrapper 還可以用于更新和刪除數據,幫助我們更加靈活地管理數據。

// 更新
User user = new User();
user.setAge(30);
QueryWrapper<User> updateWrapper = new QueryWrapper<>();
updateWrapper.eq("name", "Tom");
userService.update(user, updateWrapper);// 刪除
QueryWrapper<User> deleteWrapper = new QueryWrapper<>();
deleteWrapper.eq("name", "Tom");
userService.remove(deleteWrapper);

2.3 分頁查詢

分頁查詢是一個常見的需求。MyBatis-Plus 提供了非常簡潔的分頁支持,通過 Page 對象和 page() 方法,可以輕松實現分頁查詢。

Page<User> page = new Page<>(1, 10);  // 第 1 頁,每頁 10 條數據
Page<User> resultPage = userService.page(page, new QueryWrapper<User>().like("name", "T"));
System.out.println(resultPage.getRecords());

2.4 批量操作

MyBatis-Plus 還支持批量操作,通常通過 saveBatch()updateBatchById() 等方法來實現批量插入、更新操作。

List<User> users = new ArrayList<>();
// 假設我們已經向列表中添加了多個 User 對象
userService.saveBatch(users);

3. 小結

通過 MyBatis-Plus 提供的 IService 接口,我們可以極大地簡化業務層的開發,避免重復編寫基礎的 CRUD 操作代碼。IService 接口為我們提供了常見的操作方法,如 save()updateById()remove()list() 等,而通過繼承 ServiceImpl 類,我們可以直接享用這些功能,并且可以根據需要擴展自定義的業務邏輯。

MyBatis-Plus 的強大之處不僅僅在于簡化了數據庫操作,還支持豐富的查詢功能、分頁功能、條件構造等,能夠滿足大多數企業級應用的需求。通過合理使用這些特性,我們可以更加高效地進行數據庫操作,提升開發效率。

… …

文末

好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。

… …

學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!

wished for you successed !!!


??若喜歡我,就請關注我叭。

??若對您有用,就請點贊叭。
??若有疑問,就請評論留言告訴我叭。


版權聲明:本文由作者原創,轉載請注明出處,謝謝支持!

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

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

相關文章

[激光原理與應用-168]:光源 - 常見光源的分類、特性及應用場景的詳細解析,涵蓋技術原理、優缺點及典型應用領域

一、半導體光源1. LED光源&#xff08;發光二極管&#xff09;原理&#xff1a;通過半導體PN結的電子-空穴復合發光&#xff0c;波長由材料帶隙決定&#xff08;如GaN發藍光、AlGaInP發紅光&#xff09;。特性&#xff1a;優點&#xff1a;壽命長&#xff08;>5萬小時&#…

Metronic v.7.1.7企業級Web應用前端框架全攻略

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;Metronic是一款專注于構建響應式、高性能企業級Web應用的前端開發框架。最新版本v.7.1.7引入了多種功能和優化&#xff0c;以增強開發效率和用戶體驗。詳細介紹了其核心特性&#xff0c;包括響應式設計、多種模…

鴻蒙開發--Notification Kit(用戶通知服務)

通知是手機系統中很重要的信息展示方式&#xff0c;通知不僅可以展示文字&#xff0c;也可以展示圖片&#xff0c;甚至可以將組件加到通知中&#xff0c;只要用戶不清空&#xff0c;通知的信息可以永久保留在狀態欄上通知的介紹 通知 Notification通知&#xff0c;即在一個應用…

鴻蒙 - 分享功能

文章目錄一、背景二、app發起分享1. 通過分享面板進行分享2. 使用其他應用打開二、處理分享的內容1. module.json5 配置可接收分享2. 解析分享的數據一、背景 在App開發中&#xff0c;分享是常用功能&#xff0c;這里介紹鴻蒙開發中&#xff0c;其他應用分享到自己的app中&…

【Agent 系統設計】基于大語言模型的智能Agent系統

一篇阿里博文引發的思考和探索。基于大語言模型的智能Agent系統 1. 系統核心思想 核心思想是構建一個以大語言模型&#xff08;LLM&#xff09;為“大腦”的智能代理&#xff08;Agent&#xff09;&#xff0c;旨在解決將人類的自然語言指令高效、準確地轉化為機器可執行的自動…

企業級Web框架性能對決:Spring Boot、Django、Node.js與ASP.NET深度測評

企業級Web應用的開發效率與運行性能直接關系到業務的成敗。本文通過構建標準化的待辦事項&#xff08;Todo&#xff09;應用&#xff0c;對四大主流框架——Spring Boot、Django、Node.js和ASP.NET展開全面的性能較量。我們將從底層架構特性出發&#xff0c;結合實測數據與數據…

為什么 `source ~/.bashrc` 在 systemd 或 crontab 中不生效

摘要&#xff1a;你是否遇到過這樣的問題&#xff1a;在終端里運行腳本能正常工作&#xff0c;但用 systemd 或 crontab 自動啟動時卻報錯“命令找不到”、“模塊導入失敗”&#xff1f; 本文將揭示一個深藏在 ~/.bashrc 中的“陷阱”&#xff1a;非交互式 shell 會直接退出&am…

Linux 磁盤中的文件

1.磁盤結構 Linux中的文件加載到內存上之前是放到哪的&#xff1f; 放在磁盤上的文件——>訪問文件&#xff0c;打開它——>找到這個文件——>路徑 但文件是怎樣存儲在磁盤上的 1.1物理結構磁盤可以理解為上百億個小磁鐵&#xff08;如N為1&#xff0c;S為0&#xff0…

【方法】Git本地倉庫的文件夾不顯示紅色感嘆號、綠色對號等圖標

文章目錄前言開始操作winr&#xff0c;輸入regedit&#xff0c;打開注冊表重啟資源管理器前言 這個綠色對號圖標表示本地倉庫和遠程的GitHub倉庫內容保持一致&#xff0c;紅色則是相反咯&#xff0c;給你們瞅一下。 首先這兩個東西你一定要安裝配置好了&#xff0c;安裝順序不…

量化交易與主觀交易:哪種方式更勝一籌?

文章概要 在投資的世界里&#xff0c;量化交易和主觀交易如同冰與火&#xff0c;各自擁有獨特的優勢與挑戰。作為一名投資者&#xff0c;了解這兩種交易方式的差異和各自的優缺點至關重要。本文將從決策依據、執行方式、風險管理等方面深入探討量化交易的精確性與主觀交易的靈活…

【JS】扁平樹數據轉為樹結構

扁平數據轉為最終效果[{"label":"疼遜有限公司","code":"1212","disabled":false,"parentId":"none","children":[{"label":"財務部","code":"34343&quo…

數據結構4-棧、隊列

摘要&#xff1a;本文系統介紹了棧和隊列兩種基礎數據結構。棧采用"先進后出"原則&#xff0c;分為順序棧和鏈式棧&#xff0c;詳細說明了壓棧、出棧等基本操作及其實現方法。隊列遵循"先進先出"規則&#xff0c;同樣分為順序隊列和鏈式隊列&#xff0c;重…

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

大數據spark、hasdoop 深度學習、機器學習算法的音樂平臺用戶情感分析系統設計與實現

視頻匯聚系統EasyCVR調用設備錄像保活時視頻流不連貫問題解決方案

在使用EasyCVR過程中&#xff0c;有用戶反饋調用設備錄像保活功能時&#xff0c;出現視頻流不連貫的情況。針對這一問題&#xff0c;我們經過排查與測試&#xff0c;整理出如下解決步驟&#xff0c;供開發者參考&#xff1a;具體解決步驟1&#xff09;先調用登錄接口完成鑒權確…

【保姆級喂飯教程】python基于mysql-connector-python的數據庫操作通用封裝類(連接池版)

目錄項目環境一、db_config.py二、mysql_executor.py三、test/main.py在使用mysql-connector-python連接MySQL數據庫的時候&#xff0c;如同Java中的jdbc一般&#xff0c;每條sql需要創建和刪除連接&#xff0c;很自然就想到寫一個抽象方法&#xff0c;但是找了找沒有官方標準的…

【MCP服務】藍耘元生代 | 藍耘MCP平臺來襲!DeepSeek MCP服務器玩轉大模型集成

【作者主頁】Francek Chen 【專欄介紹】???人工智能與大模型應用??? 人工智能&#xff08;AI&#xff09;通過算法模擬人類智能&#xff0c;利用機器學習、深度學習等技術驅動醫療、金融等領域的智能化。大模型是千億參數的深度神經網絡&#xff08;如ChatGPT&#xff09…

Spring Boot 整合 Minio 實現高效文件存儲解決方案(本地和線上)

文章目錄前言一、配置1.配置文件&#xff1a;application.yml2.配置類&#xff1a;MinioProperties3.工具類&#xff1a;MinioUtil3.1 初始化方法3.2 核心功能3.3 關鍵技術點二、使用示例1.控制器類&#xff1a;FileController2.服務類3.效果展示總結前言 Minio 是一個高性能的…

【Unity3D實例-功能-鏡頭】第三人稱視覺-鏡頭優化

這一篇我們一起來調整一下Cinemachine的第三人稱視覺的鏡頭設置。一般用于ARPG角色扮演游戲的場景中。Unity里頭&#xff0c;這種視角簡直就是標配。來吧&#xff0c;咱們一起研究研究怎么調出這種視角效果&#xff01;目錄&#xff1a;1.調整虛擬攝像機的Y軸2.調整虛擬攝像機的…

二叉樹算法之【中序遍歷】

目錄 LeetCode-94題 LeetCode-94題 給定一個二叉樹的根節點root&#xff0c;返回它的中序遍歷結果。 class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result new ArrayList<>();order(root, result);return res…

Android14的QS面板的加載解析

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java QS 面板的創建 getNotificationShadeWindowView()&#xff1a;整個systemui的最頂級的視圖容器&#xff08;super_notification_shade.xml&#xff09;R.id.qs_frame &…