以下是 MyBatis  和 MyBatis-Plus  在 Spring Boot  中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异:  
 
  
1. MyBatis 和 MyBatis-Plus 核心对比   
特性 MyBatis MyBatis-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>   
</ 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 语句   
框架 配置方式 输出内容 MyBatis logging.level.org.apache.ibatis=DEBUGSQL 语句(带占位符 ?) MyBatis-Plus logging.level.com.baomidou=DEBUGSQL 语句(带占位符 ?) 
 
  
3.2 输出参数值列表   
框架 配置方式 输出内容 MyBatis 需配置 mybatis.configuration.log-impl Parameters: 1(Integer)MyBatis-Plus 默认支持 Parameters: 1(Integer)
 
  
3.3 输出完整可执行的 SQL(参数替换后)   
框架 配置方式 实现方式 输出内容 MyBatis 需自定义拦截器或日志格式 手动拼接 Preparing 和 Parameters SELECT * FROM user WHERE id = 1MyBatis-Plus 无需额外配置 内置 LoggingInterceptor 自动拼接 ==> SQL (executed): SELECT * FROM user WHERE id = 1
 
  
4. 完整配置对比表格   
配置项 MyBatis MyBatis-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  { @Override public  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  { @Bean publicInterceptor loggingInterceptor ( )  { return  new  LoggingInterceptor ( ) ;  } 
} 
  
  
6. 总结建议   
场景 推荐框架 理由 基础持久层操作 MyBatis 配置灵活,适合对 SQL 细节有严格控制的需求 快速开发 & 性能优化 MyBatis-Plus 提供大量便捷功能(如分页、代码生成),日志输出更友好(自动拼接参数) 完整 SQL 输出需求 MyBatis-Plus 默认支持参数替换后的完整 SQL,无需额外开发 
 
  
7. 注意事项   
MyBatis 的完整 SQL 输出 :  需通过自定义拦截器捕获 BoundSql 对象,手动拼接参数值。MyBatis-Plus 的性能 :  日志拦截器可能影响性能,建议仅在开发/测试环境启用 DEBUG 级别日志。依赖冲突 :  MyBatis-Plus 已包含 MyBatis,避免重复引入 MyBatis 依赖。  
如需进一步优化或解决特定问题(如日志格式、参数过滤),可提供具体需求!