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.mzph.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…