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

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.xdnf.cn/news/1218.html

相关文章:

  • 如何使用 Spring Boot 实现统一功能处理:从零开始打造高效、可扩展的后台系统
  • Feign 深度解析:Java 声明式 HTTP 客户端的终极指南
  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 纽约大学具身智能体在城市空间中的视觉导航之旅!CityWalker:从海量网络视频中学习城市导航
  • 第六章 QT基础:1、入门操作:文件操作与信号槽机制笔记
  • StarRocks 异常 Table creation timed out.
  • 小白训练日记——2025/4/22
  • 虚拟机的网络配置
  • 美团外卖霸王餐接口该如何对接?
  • C++STL(七) :unordered_set、unordered_map的介绍及使用
  • transformer-位置编码
  • Lawrence Krauss 的“从无中诞生的宇宙”(Universe from Nothing)
  • MCP Host、MCP Client、MCP Server全流程实战
  • 耀百岁中医养生与上海隽生中医药研究中心达成战略合作——共筑中医养生科研创新高地
  • 乐视系列玩机---乐视1 x600系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • RK3588 ubuntu20禁用自带的TF卡挂载,并设置udev自动挂载
  • 学习思路分享---从0开始搭建基本web服务器
  • (一)初始Linux---------Linux的背景
  • spring中使用netty-socketio部署到服务器(SSL、nginx转发)
  • 【FPGA开发】Vivado开发中的LUTRAM占用LUT资源吗
  • 入门-C编程基础部分:17、typedef
  • 安卓投屏软件QtScrcpy
  • Node.js简介(nvm使用)
  • 删除不了jar包-maven clean package失败
  • 深入探索Spark-Streaming:从基础到核心编程
  • TCP/IP协议新手友好详解
  • 【以太网安全】——防护高级特性配置总结
  • 数字化转型“变形记”:中钧科技经营帮如何让企业长出“智慧骨骼”
  • 分部积分选取u、v的核心是什么?
  • 多态以及多态底层的实现原理