当前位置: 首页 > article >正文

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 依赖。

如需进一步优化或解决特定问题(如日志格式、参数过滤),可提供具体需求!

相关文章:

MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异

以下是 MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明&#xff0c;重点对比日志输出的配置差异&#xff1a; 1. MyBatis 和 MyBatis-Plus 核心对比 特性MyBatisMyBatis-Plus定位基础持久层框架MyBatis 的增强版&#xff0c;提供代码生…...

【大模型有哪些训练阶段?】

大模型&#xff08;如 GPT、BERT 等&#xff09;训练一般可以分为以下 三个主要阶段&#xff0c;每个阶段都承担着不同的职责&#xff0c;共同推动模型从“语言新手”成长为“多任务专家”。 &#x1f9e0; 一、预训练阶段&#xff08;Pre-training&#xff09; &#x1f4cc;…...

动手试一试 Spring Boot默认缓存管理

1.准备数据 使用之前创建的springbootdata的数据库&#xff0c;该数据库有两个表t_article和t_comment&#xff0c;这两个表预先插入几条测试数据。 2.编写数据库表对应的实体类 Entity(name "t_comment") public class Comment {IdGeneratedValue(strategy Gener…...

A2A Agent 框架结构化分析报告

A2A Agent 框架结构化分析报告 第一章 绪论 1.1 引言 在全球数字化转型的浪潮中&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;技术正以前所未有的速度改变着我们的生活和工作方式。然而&#xff0c;随着AI系统的广泛应用&#xff0c;单一AI系统…...

Opencv图像处理:旋转、打包、多图像匹配

文章目录 一、图像的旋转1、使用numpy方法实现旋转1&#xff09;顺时针旋转90度2&#xff09;逆时针旋转90度 2、使用opencv的方法实现图像旋转1&#xff09;顺时针旋转90度2&#xff09;逆时针旋转90度3&#xff09;旋转180度 3、效果 二、多图像匹配1、模板2、匹配对象3、代码…...

BOM与DOM(解疑document window关系)

BOM&#xff08;浏览器对象模型&#xff09; 定义与作用 BOM&#xff08;Browser Object Model&#xff09;提供与浏览器窗口交互的接口&#xff0c;用于控制导航、窗口尺寸、历史记录等浏览器行为 window&#xff1a;浏览器窗口的顶层对象&#xff0c;包含全局属性和方法&am…...

数据仓库建设全解析!

目录 一、数据仓库建设的重要性 1. 整合企业数据资源 2. 支持企业决策制定 3. 提升企业竞争力 二、数据仓库建设的前期准备 1. 明确业务需求 2. 评估数据源 3. 制定项目计划 三、数据仓库建设的具体流程 1.需求分析​ 2.架构设计​ 3.数据建模​ 4.ETL 开发​ 5.…...

时序约束 记录

一、基础知识 1、fpga的约束文件为.fdc&#xff0c;synopsys的约束文件为.sdc。想通过fpga验证soc设计是否正确&#xff0c;可以通过syn工具(synplify)吃.fdc把soc code 转换成netlist。然后vivado P&R工具通过吃上述netlist、XDC 出pin脚约束、fdc时序约束三个约束来完成…...

Redis-cli常用参数及功能的详细说明

Redis-cli常用参数及功能的详细说明 相关参考知识书籍 <<Redis运维与开发>> 以下是Redis-cli常用参数及功能的详细说明 1. **-r​&#xff08;重复执行命令&#xff09;** 作用&#xff1a;重复执行指定命令多次。 示例&#xff1a;执行3次PING​命令&#xff1…...

第十七届山东省职业院校技能大赛 中职组网络建设与运维赛项

第十七届山东省职业院校技能大赛 中职组网络建设与运维赛项 赛题 B 卷 第十七届山东省职业院校技能大赛中职组网络建设与运维赛项 1 赛题说明 一、竞赛项目简介 “网络建设与运维”竞赛共分为以下三个模块&#xff1a;  网络理论测试&#xff1b;  网络建设与调试&#xf…...

基于SpringBoot的在线抽奖系统测试用例报告

一、项目背景 在线抽奖系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;redis来缓存验证码&#xff0c;RabbitMQ来缓存信息队列&#xff0c;同时将其部署到云服务器上。前端主要有登录页、后台管理页、活动列表页&#xff0c;抽奖页等…...

DeepSeek 部署中的常见问题及解决方案全解析

一、环境配置与依赖安装问题 1. 权限不足导致部署失败 问题现象&#xff1a;启动服务时提示权限错误&#xff0c;或无法访问文件系统。 解决方案&#xff1a; 账号权限&#xff1a;以管理员身份运行命令&#xff08;Linux/macOS 使用 sudo&#xff0c;Windows 使用 PowerShe…...

26考研|数学分析:数项级数

数项级数这一章的开始&#xff0c;开启了新的关于“级数”这一新的概念体系的学习进程&#xff0c;此部分共包含四章的内容&#xff0c;分别为数项级数、函数项级数、幂级数以及傅里叶级数。这一章中&#xff0c;首先要掌握级数的相关概念与定义&#xff0c;重难点在于掌握判断…...

likeadmin前端请求地址配置踩坑

likeadmin前端本地调试执行步骤 第一步&#xff1a;npm i 安装项目所有依赖 第二步&#xff1a;npm run dev 启动 报错&#xff0c;发送的请求没通&#xff0c;很显然请求的地址不存在 第三步&#xff1a;查找接口请求地址 配置 根目录下有个.env.production.example 文件…...

Linux平台实现低延迟的RTSP、RTMP播放

在流媒体播放器的开发过程中&#xff0c;RTSP&#xff08;实时流协议&#xff09;和RTMP&#xff08;实时消息协议&#xff09;是广泛应用的流媒体协议。本博客将介绍如何使用大牛直播SDK实现一个Linux平台下的RTSP/RTMP播放器。大牛直播SDK的Linux平台播放SDK&#xff0c;支持…...

计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解

概述 目标检测已经取得了长足的发展&#xff0c;尤其是随着基于 Transformer 的模型的兴起。RF-DETR&#xff0c;由 Roboflow 开发&#xff0c;就是这样一种模型&#xff0c;它兼顾了速度和精度。使用 Roboflow 的工具可以让整个过程变得更加轻松。他们的平台涵盖了从上传和标…...

系统思考:技术与产品协同

在《第五项修炼》中&#xff0c;彼得圣吉指出&#xff1a;组织中最根本的问题&#xff0c;往往不是个别人的能力&#xff0c;而是思维的局限和系统之间的断裂。我最近要给一家互联网公司交付系统思考的项目&#xff0c;客户希望技术和产品的管理者一起参加&#xff0c;也问我&a…...

面试之消息队列

消息队列场景 什么是消息队列&#xff1f; 消息队列是一个使用队列来通信的组件&#xff0c;它的本质就是个转发器&#xff0c;包含发消息、存消息、消费消息。 消息队列怎么选型&#xff1f; 特性ActiveMQRabbitMQRocketMQKafka单机吞吐量万级万级10万级10万级时效性毫秒级…...

大文件上传Demo及面试要点

大文件上传功能实现原理 - 面试解析 在面试中解释大文件上传功能的实现原理时&#xff0c;可以从以下几个方面进行说明&#xff1a; 1. 分片上传 (Chunked Upload) 实现原理 &#xff1a; 前端将大文件分割为固定大小(如5MB)的多个分片(Chunk)每个分片独立上传&#xff0c;…...

通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索

本文主要演示了如何使用阿里云向量检索服务Milvus版与通义千问VL大模型&#xff0c;提取图片特征&#xff0c;并使用多模态Embedding模型&#xff0c;快速实现多模态搜索。 基于灵积&#xff08;Dashscope&#xff09;模型服务上的通义千问 API以及Embedding API来接入图片、文…...

使用 Spring Boot Admin 通过图形界面查看应用配置信息的完整配置详解,包含代码示例和注释,最后以表格总结关键配置

以下是使用 Spring Boot Admin 通过图形界面查看应用配置信息的完整配置详解&#xff0c;包含代码示例和注释&#xff0c;最后以表格总结关键配置&#xff1a; 1. 环境准备 Spring Boot 版本&#xff1a;2.7.x&#xff08;兼容 Spring Boot Admin 2.x&#xff09;Spring Boot…...

解决NSMutableData appendData性能开销太大的问题

用以下高效方式,原理上是不复制内存: dispatch_data_t accumulatedData dispatch_data_empty; // 假设我们有多个数据块需要合并 for (NSData *chunk in dataChunks) { dispatch_data_t chunkData dispatch_data_create(chunk.bytes, chunk.length, …...

雪花算法生成int64,在前端js的精度问题

1.问题背景 后端对视频生成唯一性id&#xff0c;在发送评论阶段&#xff0c;由于后端接收的json数据格式&#xff0c;设置videoId为int64。前端于是使用js的Number函数&#xff0c;进行字符串转换为数字&#xff0c;由于不清楚js的精度范围&#xff0c;产生了携带的videoId变化…...

【计算机视觉】CV实战项目 - 基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化

基于YOLOv5与DeepSORT的智能交通监控系统&#xff1a;原理、实战与优化 一、项目架构与技术解析1.1 核心算法架构1.2 学术基础 二、实战环境配置2.1 硬件要求与系统配置2.2 分步安装指南 三、核心功能实战3.1 基础车辆计数3.2 自定义检测类别3.3 多区域计数配置 四、性能优化技…...

2025年3月电子学会青少年机器人技术(四级)等级考试试卷-实际操作-测评师

青少年机器人技术等级考试实际操作试卷&#xff08;四级&#xff09;-测评师 分数&#xff1a;100 题数&#xff1a;2 一、电路搭设(共1题&#xff0c;共20分) 1. 元器件&#xff1a; (1)装置中包含交通灯模块&#xff08;或元器件&#xff09;&#xff1b;&#xff08;2分…...

17.磁珠在EMC设计中的运用

磁珠在EMC设计中的运用 1. 磁珠的高频等效特性2. 磁珠的参数分析与选型3. 磁珠应用中的隐患问题 1. 磁珠的高频等效特性 和磁环类似&#xff0c;低频段感性jwL为主&#xff0c;高频段阻性R为主。 2. 磁珠的参数分析与选型 不需要太在意磁珠在100MHz时的电阻值&#xff0c;选型…...

React vs Vue:性能对决

React vs Vue:性能对决 🚀 渲染机制流程图 #mermaid-svg-LWSKliWNGUh9tZcM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LWSKliWNGUh9tZcM .error-icon{fill:#552222;}#mermaid-svg-LWSKliWNGUh9tZcM .error-…...

Mediamtx与FFmpeg远程与本地推拉流使用

1.本地推拉流 启服 推流 ffmpeg -re -stream_loop -1 -i ./DJI_0463.MP4 -s 1280x720 -an -c:v h264 -b:v 2000k -maxrate 2500k -minrate 1500k -bufsize 3000k -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream 拉流 ffplay -rtsp_transport tcp rtsp://43.136.…...

DPIN在AI+DePIN孟买峰会阐述全球GPU生态系统的战略愿景

DPIN基金会在3月29日于印度孟买举行的AIDePIN峰会上展示了其愿景和未来5年的具体发展计划&#xff0c;旨在塑造去中心化算力的未来。本次活动汇集了DPIN、QPIN、社区成员和Web3行业资深顾问&#xff0c;深入探讨DPIN构建全球领先的去中心化GPU算力网络的战略&#xff0c;该网络…...

React:<></>的存在是为了什么

1. <></> 是什么&#xff1f; <></> 是 React 的Fragment&#xff08;片段&#xff09;语法糖&#xff0c;等价于 <React.Fragment></React.Fragment>。 2. 它的作用 主要作用&#xff1a; 允许你在组件里返回多个元素&#xff0c;而不需…...