Mybtis和Mybatis-Plus區別

MyBatis 和 MyBatis-Plus 是 Java 中常用的持久層框架,MyBatis-Plus 是在 MyBatis 基礎上增強的工具包,讓開發更便捷、高效。下面是兩者主要的區別:


? 核心區別總結:

特性MyBatisMyBatis-Plus
配置復雜度需要手寫大量 XML 或注解極簡配置,自動生成 SQL
CRUD 操作手寫 Mapper 方法 + SQL內置通用 CRUD 方法
分頁功能需要手寫分頁邏輯或第三方插件內置分頁插件,開箱即用
條件構造器無,需要手寫 where 條件內置 Lambda 條件構造器
代碼生成提供代碼生成器(Code Generator)
主鍵策略需要手動配置內置多種主鍵生成策略
樂觀鎖自己實現提供內置樂觀鎖插件
審計字段(如創建時間、修改時間)自行維護提供自動填充功能
性能分析需要額外工具內置 SQL 性能分析插件
兼容性靈活、手動控制高完全兼容 MyBatis,可隨時退回

🧩 1. 配置復雜度

? MyBatis:
  • 需要創建 Mapper 接口 + Mapper.xml 文件

  • SQL 都需要手動寫,配置較繁瑣

  • 實體類、字段和表結構需要手動映射(resultMap 或 @Results)

<!-- MyBatis 的 select 示例 -->
<select id="selectById" resultType="User">SELECT * FROM user WHERE id = #{id}
</select>
? MyBatis-Plus:
  • 只需配置數據庫連接、掃描 Mapper 包

  • 不需要寫 XML,自動完成 SQL 拼接

  • 實體類字段與表字段名稱一致可自動映射

// 簡潔調用
User user = userMapper.selectById(1L);

🧩 2. CRUD 操作

? MyBatis:
  • 所有 CRUD 方法都需要手寫

  • 如果實體類字段多,SQL 寫起來冗長,易出錯

? MyBatis-Plus:
  • 提供 BaseMapper<T>,自動擁有 20+ 個通用 CRUD 方法

  • 例如:

    • selectById, insert, updateById, deleteById

    • 批量插入、分頁查詢、條件查詢等也支持

userMapper.insert(user); // 自動生成 insert SQL

🧩 3. 分頁功能

? MyBatis:
  • 需要自己拼接分頁 SQL(LIMIT/OFFSET)

  • 或接入第三方分頁插件如 PageHelper

? MyBatis-Plus:
  • 提供 分頁插件,配置一次后,使用非常方便

  • 統一使用 Page<T> 對象傳參

Page<User> page = new Page<>(1, 10); // 頁碼1,每頁10條
Page<User> result = userMapper.selectPage(page, null);

🧩 4. 條件構造器

? MyBatis:
  • 條件查詢時需要手寫 SQL 中的 where 子句
? MyBatis-Plus:
  • 提供 QueryWrapperLambdaQueryWrapper

  • 可鏈式編程、支持條件組合、動態拼接

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 20).like(User::getName, "張");
List<User> users = userMapper.selectList(wrapper);

🧩 5. 代碼生成

? MyBatis:
  • 沒有自帶代碼生成工具,通常需要借助 MyBatis Generator 插件,且配置復雜
? MyBatis-Plus:
  • 自帶 Code Generator,支持通過數據庫自動生成:

    • 實體類、Mapper 接口、XML、Service、Controller 等
// 快速生成一整套文件,只需配置數據庫和模板路徑
AutoGenerator generator = new AutoGenerator();
// 配置略...
generator.execute();

🧩 6. 主鍵策略

? MyBatis:
  • 插入數據時需要手動指定主鍵或配置主鍵返回策略(如 useGeneratedKeys)
? MyBatis-Plus:
  • 支持多種主鍵生成方式:

    • 自增、UUID、雪花算法(默認使用雪花)
  • 只需在實體類中加注解即可

@TableId(type = IdType.ASSIGN_ID) // 使用雪花算法生成主鍵
private Long id;

🧩 7. 樂觀鎖

? MyBatis:
  • 需要手動實現版本字段邏輯和 SQL 拼接
? MyBatis-Plus:
  • 提供內置插件支持樂觀鎖,自動對 version 字段進行比較和更新
@Version
private Integer version; // 更新時會自動加入 version=... 的判斷

🧩 8. 審計字段(創建時間、修改時間)

? MyBatis:
  • 需要手動在 insert/update 語句中維護 createTime, updateTime
? MyBatis-Plus:
  • 提供自動填充功能,支持插入/更新時自動填充字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
  • 需要配置 MetaObjectHandler,一次性設置全局規則

🧩 9. 性能分析

? MyBatis:
  • 需要自己接入日志框架或 SQL 監控工具(如 P6Spy)
? MyBatis-Plus:
  • 內置 SQL 執行分析插件(dev/test 環境下很實用)
// 開啟性能分析插件
interceptor.addInnerInterceptor(new PerformanceInterceptor());

🧩 10. 兼容性

? MyBatis:
  • 靈活度高,自由度大,但需要手動控制 SQL
? MyBatis-Plus:
  • 100% 兼容原生 MyBatis

  • 可以只使用通用功能,特殊需求時照樣寫 XML、注解 SQL


🚀 使用場景建議:

  • MyBatis:適合 SQL 極度復雜、強定制化的項目,想完全控制 SQL。

  • MyBatis-Plus:適合大多數通用業務,追求開發效率、簡潔的項目,尤其適合中后臺管理系統。

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

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

相關文章

JavaScript 性能優化實戰

一、代碼執行效率優化 1. 減少全局變量的使用 全局變量在 JavaScript 中會掛載在全局對象(瀏覽器環境下是window,Node.js 環境下是global)上,頻繁訪問全局變量會增加作用域鏈的查找時間。 // 反例:使用全局變量 var globalVar = example; function someFunction() {con…

學習筆記十六——Rust Monad從頭學

&#x1f9e0; 零基礎也能懂的 Rust Monad&#xff1a;逐步拆解 三大定律通俗講解 實戰技巧 &#x1f4e3; 第一部分&#xff1a;Monad 是什么&#xff1f; Monad 是一種“包值 鏈操作 保持結構”的代碼模式&#xff0c;用來處理帶上下文的值&#xff0c;并方便連續處理。 …

PL/SQL登錄慢,程序連接Oracle 提示無法連接或無監聽

PL/SQL登錄慢&#xff0c;程序連接Oracle 提示無法連接或無監聽 錯誤提示&#xff1a;ORA-12541: TNS: 無監聽程序 的解決辦法&#xff0c; 現象&#xff1a;PL/SQL登錄慢&#xff0c;程序連接Oracle 提示無法連接或無監聽 監聽已經正常開起&#xff0c;但還是PL/SQL登錄慢或…

Windows10,11賬戶管理,修改密碼,創建帳戶...

在這里&#xff0c;我們使用微軟操作系統的一款工具:netplwiz 它可以非常便捷的管理用戶賬戶. 一:修改密碼(無需現在密碼) 01修改注冊表 運行命令&#xff1a;regedit 在地址欄輸入&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Passwor…

電腦 BIOS 操作指南(Computer BIOS Operation Guide)

電腦 BIOS 操作指南 電腦的BIOS界面&#xff08;應為“BIOS”&#xff09;是一個固件界面&#xff0c;允許用戶配置電腦的硬件設置。 進入BIOS后&#xff0c;你可以進行多種設置&#xff0c;具體包括&#xff1a; 1.啟動配置 啟動順序&#xff1a;設置從哪個設備啟動&#x…

iOS 冷啟動時間監控:啟動起點有哪些選擇?

?? iOS 冷啟動時間監控&#xff1a;啟動起點有哪些選擇&#xff1f; 作者&#xff1a;侯仕奇 來源&#xff1a;sqi.io 在監控 iOS 冷啟動性能時&#xff0c;一個關鍵問題是&#xff1a;如何精確記錄 App 冷啟動的開始時間&#xff1f; 本文將對不同的“冷啟動起點”監控方式…

onlyoffice關閉JWT后依然報錯如何解決?

onlyoffice關閉JWT后依然報錯如何解決&#xff1f; 一、部署方式 我是以docker方式部署的&#xff0c;直接通過環境變量禁用了JWT&#xff0c;命令如下&#xff1a; docker run -d \--name onlyoffice-no-jwt \--restartalways \-p 8069:80 \-e JWT_ENABLEDfalse \onlyoffic…

rk3588 驅動開發(一)字符設備開發

3.字符設備驅動開發 3.1 什么是字符設備驅動 字符設備&#xff1a;就是一個個字節&#xff0c;按照字節流進行讀寫操作的設備&#xff0c;讀寫是按照先后順序的。 舉例子&#xff1a;IIC 按鍵 LED SPI LCD 等 Linux 應用程序調用驅動程序流程&#xff1a; Linux中驅動加載成功…

設計模式 --- 外觀模式

外觀模式是一種結構型設計模式&#xff0c;為復雜子系統提供??統一的高層接口??&#xff0c;通過定義一個外觀類來??簡化客戶端與子系統的交互??&#xff0c;降低系統耦合度。這種模式隱藏了子系統的復雜性&#xff0c;將客戶端與子系統的實現細節隔離開來&#xff0c;…

我的gittee倉庫

日常代碼: 日常代碼提交https://gitee.com/xinxin-pingping/daily-code 有需要的寶子們可自行讀取。

微服務調用中的“大對象陷阱”:CPU飆高問題解析與優化

背景 對幾十萬條用戶歷史存量數據寫入&#xff0c;且存在大對象的基礎上。kafka消費進行消費寫mysql超時。導致上游服務調用時異常&#xff0c;CPU飆高異常。 大對象解釋 大對象的定義與危害 1. 什么是大對象&#xff1f; JVM 內存分配機制&#xff1a;Java 中對象優先分配…

代碼隨想錄算法訓練營day6(字符串)

華子目錄 反轉字符串思路 反轉字符串II思路 替換數字思路 反轉字符串 https://leetcode.cn/problems/reverse-string/ 思路 使用雙指針&#xff0c;初始化時&#xff0c;left指向下標0的位置&#xff0c;right指向最后一個元素的下標當while left<right時&#xff0c;交換…

Oracle 19c新特性:OCP認證考試與職業躍遷的關鍵?

在數字化轉型的浪潮中&#xff0c;Oracle 19c作為數據庫領域的旗艦版本&#xff0c;不僅承載著技術革新的使命&#xff0c;更成為IT從業者職業進階的“黃金跳板”。無論是企業級應用的高可用性需求&#xff0c;還是云原生架構的快速迭代&#xff0c;Oracle 19c的智能化與多模型…

【MySQL數據庫入門到精通】

文章目錄 一、SQL分類二、DDL-數據庫操作1.查詢2.創建數據庫3.刪除數據庫4.使用數據庫 三、DDL-表操作1.查詢 一、SQL分類 根據功能主要分為DDL DML DQL DCL DDL:Date Definition Language數據定義語言&#xff1a;定義數據庫&#xff0c;表和字段 DML:Date Manipulatin Lan…

MCP服務端開發

MCP(Memory, Context, Planning)是一種增強AI系統認知能力的框架,通過整合記憶管理、上下文理解和規劃能力,可以顯著提升AI系統的表現。下面我將為您開發一個完整的MCP服務端。 概述 我們將使用Python開發一個基于FastAPI的MCP服務端,包含以下核心組件: Memory Manager…

前端:uniapp中uni.pageScrollTo方法與元素的overflow-y:auto之間的關聯

在uniapp中&#xff0c;uni.pageScrollTo方法與元素的overflow-y:auto屬性之間存在以下關聯和差異&#xff1a; 一、功能定位差異 ?uni.pageScrollTo? 屬于?頁面級滾動控制?&#xff0c;作用于整個頁面容器?34。要求頁面內容高度必須超過屏幕高度&#xff0c;且由根元素下…

基礎知識-指針

1、指針的基本概念 1.1 什么是指針 1.1.1 指針的定義 指針是一種特殊的變量&#xff0c;與普通變量存儲具體數據不同&#xff0c;它存儲的是內存地址。在計算機程序運行時&#xff0c;數據都被存放在內存中&#xff0c;而指針就像是指向這些數據存放位置的 “路標”。通過指針…

VS遠程Linux_CMake項目搭建

VS遠程Linux CMake項目搭建 準備工作 遠程計算機上安裝 gcc: 一個開源的編譯器集合, GCC支持多種編程語言的編譯&#xff0c;包括C、C、Objective-C、Fortran、Ada、Go、D和Javagdb: GDB&#xff08;GNU Debugger&#xff09;是一個功能強大的調試工具&#xff0c;主要用于調…

替代升級VMware | 云軸科技ZStack構建山西證券一云多芯云平臺

通過云軸科技ZStack Cloud云平臺&#xff0c;山西證券打造了敏捷部署、簡單運維的云平臺&#xff0c;不僅兼容x86、海光、鯤鵬三種異構服務器實現一云多芯&#xff0c;還通過云平臺虛擬化納管模塊納管原有VMware虛擬化資源&#xff0c;并對接第三方集中式存儲&#xff0c;在保護…

MATLAB - 模型預測控制器(MPC)的穩定性和魯棒性問題

系列文章目錄 目錄 系列文章目錄 前言 一、被控對象模型 二、初始控制器設計 三、改進初始設計 五、查看軟約束 七、參考 前言 您可以檢查模型預測控制器設計是否存在潛在的穩定性和魯棒性問題。具體操作如下 在命令行中&#xff0c;使用審查功能。在 MPC Designer 中&a…