MyBatis-Plus:簡化 CRUD 操作的藝術

ccm03發表於2024-10-31

一、關於MyBatis-Plus

1.1 簡介

MyBatis-Plus 是一個基於 MyBatis 的增強工具,它旨在簡化 MyBatis 的使用,提高開發效率。

9e920e5e-2e5b-4031-b546-1088ec5fa2e3

image

關於Mybatis

簡介

MyBatis 是一款流行的 Java 持久層框架,旨在簡化 Java 應用程式與資料庫之間的互動。與傳統的 ORM(物件關係對映)框架不同,MyBatis 提供了更大的靈活性,允許開發者自定義 SQL 語句。

91619c90-d7c3-4bd6-964d-0303af8ff2da

發展

初始階段 - iBatis

  • 2001年:iBatis 專案由 Clinton Begin 發起,最初是一個開源專案,主要用於密碼軟體的開發,後來演變成一個基於 Java 的持久層框架。
  • 2004年:Clinton Begin 將 iBatis 的名字和原始碼捐贈給了 Apache 軟體基金會(ASF),成為 Apache 孵化器中的一個專案。在此期間,iBatis 成為了一個成熟的框架,被廣泛應用於各種 Java 應用程式中。

轉型期 - 從 iBatis 到 MyBatis

  • 2010年6月:iBatis 專案的核心開發團隊決定將專案從 ASF 遷移到 Google Code,並將專案名改為 MyBatis。這次遷移標誌著 iBatis 專案的重生,並引入了一些新的特性和改進。
  • 2013年11月:隨著 Google Code 的服務逐步關閉,MyBatis 專案遷移至 GitHub,繼續其開發和維護。

現代化與持續發展

  • 自從遷移到 GitHub 後,MyBatis 社群繼續活躍,專案得到了持續的更新和完善。MyBatis 透過提供更好的 API 設計、更豐富的功能以及更高的靈活性,成為了許多 Java 開發者的首選持久層解決方案。
  • MyBatis 的設計使其能夠很好地與其他 Java 框架(如 Spring)整合,同時也支援多種資料庫管理系統(DBMS),這使得它成為一個非常靈活的選擇。

特點

  1. SQL 語句對映:MyBatis 允許開發者透過 XML 或註解方式定義 SQL 語句,並將這些 SQL 語句與 Java 方法進行對映。
  2. 靈活性:與 ORM 框架相比,MyBatis 提供了更高的 SQL 自定義能力,開發者可以手動編寫複雜的 SQL 語句,以滿足具體的業務需求。
  3. 支援多種資料庫:MyBatis 支援多種關係型資料庫,便於在不同的環境中使用。
  4. 物件關係對映:雖然 MyBatis 不像 Hibernate 那樣全面支援 ORM,但它提供了基本的物件對映功能,可以將資料庫表中的記錄對映為 Java 物件。
  5. 動態 SQL:MyBatis 支援動態 SQL,可以根據條件生成不同的 SQL 語句,提高了查詢的靈活性。
  6. 快取機制:MyBatis 提供了一級和二級快取,能夠提高資料庫訪問的效能,減少重複的資料庫操作。
  7. 事務管理:MyBatis 支援與 Spring 等框架整合,方便管理資料庫事務。

1.2 發展

MyBatis-Plus(簡稱 MP)是在 MyBatis 的基礎上進行功能增強和擴充套件的一個開源專案,旨在進一步簡化基於 MyBatis 的資料訪問層(DAO)開發。以下是 MyBatis-Plus 的主要發展歷程:

  1. 2016 年初

    • MyBatis-Plus 專案初始建立,最初由 baomidou (苞米豆)團隊發起,旨在解決 MyBatis 使用過程中的繁瑣程式碼和重複性工作,提供更便捷的 CRUD 操作和通用的查詢功能。MyBatis-Plus 的名稱直接表明了它與 MyBatis 的關係,即在 MyBatis 的基礎上做了增強,而不是替代或改變 MyBatis 的原有功能。
  2. 功能逐步擴充套件

    • 初始階段,MyBatis-Plus 主要集中在通用 CRUD 方法的封裝和簡化,以及一些便捷的查詢功能,比如條件構造器等。
  3. 2017 年

    • MyBatis-Plus 在社群的支援下,逐步增加了更多實用的功能模組,如程式碼生成器、分頁外掛、效能分析外掛等,使得開發者能夠更高效地進行開發工作。
  4. 2018 年

    • MyBatis-Plus 釋出了一系列更新版本,加強了對 Lambda 表示式的支援,使得在條件構造時可以更加簡潔和直觀,同時提高了查詢的型別安全性。
  5. 2019 年

    • MyBatis-Plus 繼續擴充套件其功能,引入了更多的增強特性和外掛,如全域性攔截器、SQL 注入器等,進一步增強了其在複雜應用場景下的靈活性和擴充套件性。
  6. 2020 年以後

    • MyBatis-Plus 持續穩定更新,解決了社群反饋的 bug 和安全問題,同時繼續最佳化和增強現有功能,保持與最新技術的相容性和整合性。

1.3 特性

  1. 無侵入設計:MyBatis-Plus 對 MyBatis 的核心功能進行了增強,使用時不需要對原有的 MyBatis 程式碼做過多改動。
  2. CRUD 操作的簡化:提供了通用 Mapper 和通用 Service,開發者只需繼承相應的介面即可實現基本的 CRUD 操作,減少了重複程式碼。
  3. 條件構造器:MyBatis-Plus 提供了 Lambda 形式的條件構造器,便於進行復雜的查詢條件構造,提高了程式碼的可讀性和維護性。
  4. 分頁外掛:內建分頁功能,開發者可以輕鬆實現資料的分頁查詢,無需手動編寫 SQL。
  5. 效能分析:提供 SQL 效能分析功能,可以檢視執行的 SQL 語句及其效能,便於最佳化。
  6. 程式碼生成器:內建程式碼生成器,可以根據資料庫表自動生成對應的實體類、Mapper 介面等,進一步提高開發效率。
  7. 多種擴充套件功能:支援樂觀鎖、邏輯刪除、程式碼生成、註解驅動等功能,增強了應用的靈活性。

1.4 支援資料庫

image

二、架構原理

image

2.1 核心元件

  1. AutoMapper:這是 MyBatis-Plus 中一個重要的抽象,它負責自動生成 CRUD 操作的 SQL 語句。開發者可以透過繼承 BaseMapper<T>​ 介面來實現自己的 Mapper 介面。
  2. ServiceImpl:這是 MyBatis-Plus 提供的服務實現類,它繼承自 ServiceImpl<T, IId>​,為 Service 層提供了一系列常用的方法。
  3. Entity:這是 MyBatis-Plus 中用於表示資料庫表的實體類,通常繼承自 BaseEntity​,以便利用一些通用屬性和方法。
  4. Configuration:配置 MyBatis-Plus 的各種行為,如分頁、日誌記錄等。
  5. Interceptor:攔截器,可以用來攔截 SQL 語句,例如分頁外掛、效能分析外掛等。

2.2 主要模組

  1. CRUD 操作:提供了諸如 insert()​, updateById()​, deleteById()​ 等方法,簡化了 CRUD 操作。
  2. Lambda 表示式:允許使用 Java 8 的 Lambda 表示式來構建查詢條件,提高了程式碼的可讀性和安全性。
  3. 分頁外掛:內建的分頁功能,透過簡單的配置即可啟用。
  4. 程式碼生成器:提供了一個命令列工具,可以快速生成基礎的 Mapper、Model、Service、Controller 層程式碼。
  5. 全域性攔截器:可以全域性攔截 SQL 語句,進行一些額外的操作,比如記錄日誌、SQL 分析等。

2.3 工作原理

初始化階段

  1. SqlSessionFactoryBuilder:MyBatis-Plus 使用 MyBatis 的 SqlSessionFactoryBuilder​ 來構建 SqlSessionFactory​,這是 MyBatis-Plus 應用程式啟動的第一步。
  2. SqlSessionFactorySqlSessionFactory​ 建立 SqlSession​,SqlSession​ 負責執行 SQL 語句,並將結果對映到 Java 物件。
  3. Configuration:配置檔案被解析,配置 MyBatis-Plus 的各種行為,如分頁外掛的配置等。

執行階段

  1. Mapper 介面呼叫:開發者透過呼叫 Mapper 介面中定義的方法來觸發 SQL 操作。
  2. SQL 語句生成:根據傳入的引數,MyBatis-Plus 自動生成相應的 SQL 語句。例如,使用 lambdaQuery()​ 方法可以生成帶有條件的 SQL。
  3. SQL 執行:SQL 語句透過 SqlSession​ 執行,結果被對映到對應的 Java 物件。
  4. 結果返回:執行結果被封裝後返回給呼叫方。

特殊功能實現

  1. 分頁功能:透過全域性攔截器自動新增分頁資訊到 SQL 語句中,實現分頁查詢。
  2. 效能分析:同樣透過全域性攔截器記錄 SQL 執行時間和慢查詢,幫助最佳化資料庫訪問。
  3. Lambda 表示式支援:利用 Java 8 的 Lambda 表示式來構建查詢條件,提高了程式碼的可讀性和可維護性。

MyBatis-Plus 透過一系列的設計模式和外掛機制,極大地簡化了基於 MyBatis 的應用程式開發。它透過自動化的 CRUD 操作、Lambda 表示式支援、內建分頁外掛等功能,降低了開發者的負擔,並提高了開發效率。同時,它還提供了程式碼生成器,進一步加快了開發速度。這些特性使得 MyBatis-Plus 成為一個非常受歡迎的 MyBatis 擴充套件工具。

相關文章