MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能對比及 SQL 日志輸出的詳細說明,重點對比日志輸出的配置差異

以下是 MyBatisMyBatis-PlusSpring Boot 中的配置、功能對比及 SQL 日志輸出的詳細說明,重點對比日志輸出的配置差異:
在這里插入圖片描述


1. MyBatis 和 MyBatis-Plus 核心對比

特性MyBatisMyBatis-Plus
定位基礎持久層框架MyBatis 的增強版,提供代碼生成、自動填充等
依賴復雜度需手動配置數據源、SqlSessionFactory通過 Starter 自動配置,簡化配置
SQL 日志輸出需手動配置日志級別和攔截器內置 LoggingInterceptor 自動輸出 SQL
參數綁定顯示需依賴日志框架(如 SLF4J)直接輸出參數值,無需額外配置
性能優化依賴攔截器或自定義實現內置性能增強(如分頁、批量操作)

2. Spring Boot 集成配置

2.1 MyBatis 配置
2.1.1 依賴引入
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version> <!-- Spring Boot 2.3.2 適配版本 -->
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.1.2 核心配置(application.properties
# 數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl  # 日志實現
2.1.3 日志輸出配置
# 啟用 SQL 日志
logging.level.org.apache.ibatis=DEBUG
2.1.4 SQL 輸出示例
DEBUG org.apache.ibatis.executor.statement.RoutingStatementHandler - 
==>  Preparing: SELECT * FROM user WHERE id = ?
DEBUG org.apache.ibatis.executor.statement.RoutingStatementHandler - 
==> Parameters: 1(Integer)

2.2 MyBatis-Plus 配置
2.2.1 依賴引入
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2.2 核心配置(application.properties
# 數據源配置(自動繼承 Spring Boot 數據源)
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis-Plus 配置
mybatis-plus.configuration.map-underscore-to-camel-case=true
2.2.3 日志輸出配置
# 啟用 SQL 日志
logging.level.com.baomidou=DEBUG
2.2.4 SQL 輸出示例
DEBUG com.baomidou.mybatisplus.core.override.MybatisMapperMethod - 
==>  Preparing: SELECT * FROM user WHERE id = ?
DEBUG com.baomidou.mybatisplus.core.override.MybatisMapperMethod - 
==> Parameters: 1(Integer)

3. SQL 日志輸出對比

3.1 輸出 SQL 語句
框架配置方式輸出內容
MyBatislogging.level.org.apache.ibatis=DEBUGSQL 語句(帶占位符 ?
MyBatis-Pluslogging.level.com.baomidou=DEBUGSQL 語句(帶占位符 ?

3.2 輸出參數值列表
框架配置方式輸出內容
MyBatis需配置 mybatis.configuration.log-implParameters: 1(Integer)
MyBatis-Plus默認支持Parameters: 1(Integer)

3.3 輸出完整可執行的 SQL(參數替換后)
框架配置方式實現方式輸出內容
MyBatis需自定義攔截器或日志格式手動拼接 PreparingParametersSELECT * FROM user WHERE id = 1
MyBatis-Plus無需額外配置內置 LoggingInterceptor 自動拼接==> SQL (executed): SELECT * FROM user WHERE id = 1

4. 完整配置對比表格

配置項MyBatisMyBatis-Plus
依賴mybatis-spring-boot-startermybatis-plus-boot-starter
日志框架配置mybatis.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl無需配置,默認集成 SLF4J
SQL 日志級別logging.level.org.apache.ibatis=DEBUGlogging.level.com.baomidou=DEBUG
參數值顯示需配置 log-impl 依賴日志框架默認支持,無需額外配置
完整 SQL 輸出需自定義攔截器或日志格式拼接參數值內置 LoggingInterceptor 自動輸出完整 SQL(如 ==> SQL (executed)
性能優化功能分頁、批量操作、自動填充、代碼生成等
配置復雜度較高(需手動配置數據源、攔截器)低(Starter 自動配置,依賴少)

5. 關鍵配置代碼示例

5.1 MyBatis 輸出完整 SQL(需自定義攔截器)
// 自定義攔截器
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class FullSqlInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {StatementHandler handler = (StatementHandler) invocation.getTarget();MetaObject metaObject = SystemMetaObject.forObject(handler);MappedStatement ms = (MappedStatement) metaObject.getValue("delegate.mappedStatement");BoundSql boundSql = handler.getBoundSql();String sql = boundSql.getSql().replaceAll("[\\s]+", " ");Object parameterObject = boundSql.getParameterObject();logger.debug("Full SQL: {} | Parameters: {}", sql, parameterObject);return invocation.proceed();}
}
5.2 MyBatis-Plus 輸出完整 SQL
// 無需額外配置,默認輸出
@Configuration
public class MyBatisPlusConfig {@BeanpublicInterceptor loggingInterceptor() {return new LoggingInterceptor(); // 自動輸出完整 SQL(參數替換后)}
}

6. 總結建議

場景推薦框架理由
基礎持久層操作MyBatis配置靈活,適合對 SQL 細節有嚴格控制的需求
快速開發 & 性能優化MyBatis-Plus提供大量便捷功能(如分頁、代碼生成),日志輸出更友好(自動拼接參數)
完整 SQL 輸出需求MyBatis-Plus默認支持參數替換后的完整 SQL,無需額外開發

7. 注意事項

  1. MyBatis 的完整 SQL 輸出
    需通過自定義攔截器捕獲 BoundSql 對象,手動拼接參數值。
  2. MyBatis-Plus 的性能
    日志攔截器可能影響性能,建議僅在開發/測試環境啟用 DEBUG 級別日志。
  3. 依賴沖突
    MyBatis-Plus 已包含 MyBatis,避免重復引入 MyBatis 依賴。

如需進一步優化或解決特定問題(如日志格式、參數過濾),可提供具體需求!

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

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

相關文章

《數據結構世界的樂高積木:順序表的奇幻旅程》

目錄 1. 線性表 2. 順序表 2.1 概念與結構 2.2 分類 2.2.1 靜態順序表 2.2.2 動態順序表 2.3 動態順序表的實現 1. 線性表 線性表&#xff08;linear list&#xff09;是n個具有相同特性的數據元素的有限序列。線性表是?種在實際中?泛使?的數據結構&#xff0c;常?的…

RHCE 練習二:通過 ssh 實現兩臺主機免密登錄以及 nginx 服務通過多 IP 區分多網站

一、題目要求 1.配置ssh實現A&#xff0c;B主機互相免密登錄 2.配置nginx服務&#xff0c;通過多ip區分多網站 二、實驗 實驗開始前需準備兩臺 linux 主機便于充當服務端以及客戶端&#xff0c;兩臺主機 IP 如下圖&#xff1a; 實驗1&#xff1a;配置 ssh 實現 A&#xff0…

第十五屆藍橋杯 2024 C/C++組 好數

題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 好數 思路&#xff1a; 第一種思路詳解&#xff1a; 因為每次檢查數都是從個位開始&#xff0c;所以對于每一個數都是先檢查奇數位再檢查偶數位&#xff0c;即存在先檢查奇數位再檢查偶數位的循環。注意一次完…

展銳Android13狀態欄默認顯示電池電量百分比

展銳Android13電池狀態默認不顯示電池電量百分比&#xff0c;打開 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml 在xml的文件最后&#xff0c;增加一項配置def_show_battery_percent&#xff1a; <?xml version"1.0" encoding"u…

OpenCV 高斯模糊 cv2.GaussianBlur

OpenCV 高斯模糊 cv2.GaussianBlur flyfish cv2.GaussianBlur 是 OpenCV 庫中用于對圖像進行高斯模糊處理的函數。 高斯模糊的含義 高斯模糊是一種常見的圖像濾波技術&#xff0c;它可以對圖像進行平滑處理&#xff0c;減少圖像中的噪聲和細節&#xff0c;使得圖像看起來更…

[密碼學基礎]密碼學發展簡史:從古典藝術到量子安全的演進

密碼學發展簡史&#xff1a;從古典藝術到量子安全的演進 密碼學作為信息安全的基石&#xff0c;其發展貫穿人類文明史&#xff0c;從最初的文字游戲到量子時代的數學博弈&#xff0c;每一次變革都深刻影響著政治、軍事、科技乃至日常生活。本文將以技術演進為主線&#xff0c;…

PostgreSQL認證培訓推薦機構

首先來看一張2025年4月份db-engines上的數據庫排行情況&#xff0c;前三名是雷打不動的Oracle、MySQL、Microsoft SQL Server&#xff0c;排名第四的就是我們今天的主角 - PostgreSQL數據庫&#xff0c;從這張圖上可以看出&#xff0c;PostgreSQL數據庫的上升超非常明顯&#x…

STM32 CubeMx下載及安裝(一)

CubeMx及Java下載安裝&#xff08;一&#xff09; 1 背景1.1 基本介紹1.2 主要特點1.3 相關準備 2 軟件下載2.1 Java 官網下載2.2 CubeMx官網下載2.4 CubeMX網盤下載 3 軟件安裝3.1 Java 軟件安裝3.1.1 安裝過程 3.2 CubeMx軟件安裝 總結 1 背景 1.1 基本介紹 STM32CubeMX&am…

Spring Boot 應用優雅關閉

寫這篇文章是因為看到 “線程池在使用結束后應該正確關閉.” 那么如果我們的 Spring 應用都無法正確關閉, 那么線程池肯定也無從保障 1. 優雅關閉 kill with pid, without -9 大多數情況下無須在意這個問題, 正確使用 kill 命令關閉就行 (注意不能使用 kill -9) kill $(cat …

linux與c語言基礎知識(未全部完成)

文章很多處理論&#xff0c;沒辦法寫出來&#xff0c;&#xff08;linux的一些理論問題&#xff0c;我有時間后&#xff0c;會逐個解決&#xff09; 文章大多數的理論來字這個鏈接&#xff0c; C語言快速入門-C語言基礎知識-CSDN博客 一. linux&#xff08;Ubuntu&#xff09; …

面試經歷(一)雪花算法

uid生成方面 1&#xff1a;為什么用雪花算法 分布式ID的唯一性需要保證&#xff0c;同時需要做到 1&#xff1a;單調遞增 2&#xff1a;確保安全&#xff0c;一個是要能體現出遞增的單號&#xff0c;二一個不能輕易的被惡意爬出訂單數量 3&#xff1a;含有時間戳 4&#…

基于GA遺傳優化TCN-BiGRU注意力機制網絡模型的時間序列預測算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 matlab2024b&#xff08;提供軟件版本下載&#xff09; 3.部分核心程序 &#xff08;完整版代碼包…

深度強化學習 pdf 董豪| 馬爾科夫性質,馬爾科夫過程,馬爾科夫獎勵過程,馬爾科夫決策過程

深度強化學習 pdf 百度云 hea4 pdf 主頁 概念 馬爾可夫獎勵過程和價值函數估計的結合產生了在絕大多數強化學習方法中應用的核心結果——貝爾曼 &#xff08;Bellman&#xff09;方程。最優價值函數和最優策略可以通過求解貝爾曼方程得到&#xff0c;還將介紹三種貝爾曼 方…

驗證Kubernetes的服務發現機制

驗證Kubernetes的服務發現機制 文章目錄 驗證Kubernetes的服務發現機制[toc]一、驗證基于環境變量的服務發現機制 服務發現是讓客戶端能夠以固定的方式獲取到后端Pod訪問地址的機制。下面驗證環境變量和DNS這兩種機制。 一、驗證基于環境變量的服務發現機制 對于需要訪問服務…

FPGA系列之DDS信號發生器設計(DE2-115開發板)

一、IP核 IP(Intellectual Property)原指知識產權、著作權等&#xff0c;在IC設計領域通常被理解為實現某種功能的設計。IP模塊則是完成某種比較復雜算法或功能&#xff08;如FIR濾波器、FFT、SDRAM控制器、PCIe接口、CPU核等&#xff09;并且參數可修改的電路模塊&#xff0c…

Java單例模式詳解:實現線程安全的全局訪問點

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 一、什么是單例模式&#xff1f; 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;它保證一個類僅有一個實例&#xff…

JVM 生產環境問題定位與解決實戰(七):實戰篇——OSSClient泄漏引發的FullGC風暴

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄&#xff0c;完整系列見文末目錄 引言 在前六篇博客中&#xff0c;我們系統性地學習了 JVM 生產環境問題定位與解決的全套工具鏈&#xff0c;涵蓋jps、jmap、jstat、jstack、jcmd 等基礎工具的使用技巧&#xff0c;深入剖析…

Spark集群搭建-spark-local

&#xff08;一&#xff09;安裝Spark 安裝Spark的過程就是下載和解壓的過程。接下來的操作&#xff0c;我們把它上傳到集群中的節點&#xff0c;并解壓運行。 1.啟動虛擬機 2.通過finalshell連接虛擬機&#xff0c;并上傳安裝文件到 /opt/software下 3.解壓spark安裝文件到/op…

Java 異常 SSLException: fatal alert: protocol_version 全解析與解決方案

在 Java 網絡通信中&#xff0c;SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 協議版本不兼容異常。本文結合 Java 官方規范、TLS 協議標準及實戰經驗&#xff0c;提供體系化解決方案&#xff0c;幫助開發者快速定位并解決協議版本沖突問題。 一、異常本質&…

虛擬列表技術深度解析:原理、實現與性能優化實戰

虛擬列表技術深度解析&#xff1a;原理、實現與性能優化實戰 引言 在當今數據驅動的互聯網應用中&#xff0c;長列表渲染已成為前端開發的核心挑戰。傳統的一次性全量渲染方式在數據量超過千條時&#xff0c;往往導致頁面卡頓、內存飆升等問題。虛擬列表&#xff08;Virtual L…