问题背景

通常我们开发的时候,需要联合控制台和Navicat/PLSQL等工具进行语句的拼接检查,如果只是输出了一堆???,那么将极大降低我们的效率。因此我们需要输出完整的SQL语句以便调试。

Update

  • 2020-Oct : 新增LOG DEBUG LEVEL模式
  • 2020-July : 新增官方p6spy打印分析sql语句方案

解决方案(StdOutImpl)

请注意: 部分朋友反馈不生效,估计跟引入的包有一定关系,druid+mybatis-plus-boot-starter 就亲测有用。请检查是否有log4j相关实现类。

如果是application.yml

#by zhengkai.blog.csdn.net
#mybatis-plus配置控制台打印完整带参数SQL语句
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

如果是application.properties,添加:

#mybatis-plus配置控制台打印完整带参数SQL语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种方式:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging
  • no logging

具体选择哪个日志实现由MyBatis的LogFactory内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。 如果一个都未找到,日志功能就会被禁用。

    static {tryImplementation(LogFactory::useSlf4jLogging);tryImplementation(LogFactory::useCommonsLogging);tryImplementation(LogFactory::useLog4J2Logging);tryImplementation(LogFactory::useLog4JLogging);tryImplementation(LogFactory::useJdkLogging);tryImplementation(LogFactory::useNoLogging);}

不少应用服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis会把它作为具体的日志实现。

记住这点非常重要。这意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。

这种做法不免让人悲摧,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存 在,按优先级Log4J自然就被忽略了!

控制台输出

--- [ XNIO-1 task-12] c.s.cms.controller.IndexController       : username-admin-password-123456-****
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@708e9ffd] was not registered for synchronization because synchronization is not active
--- [ XNIO-1 task-12] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@62b13210] will not be managed by Spring
==>  Preparing: select * from user t where t.user_code='admin' and t.password='123456'
==> Parameters:
<==    Columns: user_id, user_code, create_date, modify_date, user_name, password, status, role_id, department_id, major_id, classes_id, year
<==        Row: 1, admin, 2020-02-15 22:14:32, 2020-02-18 23:38:51, Moshow K ZHENG, 123456, 1, 9, 1, 13, 113, 2020
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@708e9ffd]

解决方案(手写MybatisPlusOutImpl)

配置文件

mybatis-plus:configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    改为自己写的log-impl: com.softdev.system.config.MybatisPlusOutImpl

java类 MybatisPlusOutImpl

package com.softdev.system.config;import org.apache.ibatis.logging.Log;
/*** @Description MybatisPlusOutImpl,直接使用控制台输出日志* @Author zhengkai.blog.csdn.net**/
public class MybatisPlusOutImpl implements Log {public MybatisPlusOutImpl(String clazz) {System.out.println("MybatisPlusOutImpl::"+clazz);}public boolean isDebugEnabled() {return true;}public boolean isTraceEnabled() {return true;}public void error(String s, Throwable e) {System.err.println(s);e.printStackTrace(System.err);}public void error(String s) {System.err.println("MybatisPlusOutImpl::"+s);}public void debug(String s) {System.out.println("MybatisPlusOutImpl::"+s);}public void trace(String s) {System.out.println("MybatisPlusOutImpl::"+s);}public void warn(String s) {System.out.println("MybatisPlusOutImpl::"+s);}
}

解决方案(LOG-DEBUG模式)

# 在application.yml 中增加配置,指定 mapper 文件所在的包,进入DEBUG模式
logging:level:com.baomidou.example.mapper: debug

官方解决方案p6spy(不建议)

查看p6spy最新版本 ,请注意,该方案为侵入式的JDBC级方案。

pom.xml引入

<!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.9.1</version>
</dependency>

这是yaml版本,还没试过,待我实验一下.

spring:datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:h2:mem:test...

这是官方提供的properties版本

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

mybatis-plus配置控制台打印完整带参数SQL语句相关推荐

  1. MyBatis Plus整合p6spy控制台打印美化格式的sql语句

    简介: p6spy配合mybatis plus可以在控制台打印出指定格式已执行的sql语句,便于开发人员分析和调试.下面介绍一下p6spy的简单配置和使用 使用: 一.引入p6spy依赖包: < ...

  2. Mybatis最入门---分页查询(逻辑分页与SQL语句分页)

    [一步是咫尺,一步即天涯] 到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层.但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的.本文,我们将从逻辑分页, ...

  3. mybatis笔记之一次插入多条数据sql语句写法

    mybatis笔记之一次插入多条数据sql语句写法

  4. mybatis 向DB2数据库插入自增长的SQL语句报:DB2 SQL Error: SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID, DRIVER=4.16.53

    mybatis 向DB2数据库插入自增长的SQL语句报如下错误: SQL语句: <insert id="addUser" parameterType="user&q ...

  5. mysql 输出参数 sql语句_MySQL: 详细的sql语句

    1添 1.1[插入单行] insert [into] (列名) values (列值) 例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男',' ...

  6. mysql执行一条sql语句的完整过程,sql语句在mysql中的执行过程

    文章目录 1. SQL语句在mysql的执行过程 一:客户端层 二:mysql服务器层 三:innoDB引擎层 2. undo日志.redo日志.binlog日志的区别? 1. SQL语句在mysql ...

  7. Mybatis中使用oracle的模糊查询的SQL语句写法

    在学习mybatis的学习中,用到模糊查询的时候,发现直接拼接成'%'#{description}'%'会报错,然后整理了三种模糊查询的SQL语句写法: 1.在传参的时候,就把参数拼接为"% ...

  8. mybatis如何在控制台打印执行的sql语句

    2019独角兽企业重金招聘Python工程师标准>>> log4j.rootLogger=DEBUG, Console  #Console  log4j.appender.Conso ...

  9. mybatis之xml中日期时间段查询的sql语句

    <if test="startDate!=null and startDate!=''"> and CREATEDATE >=#{startDate}</i ...

最新文章

  1. CodeGen按钮循环
  2. 关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片
  3. Nature:2020年10大科学发现
  4. python自动化上传图片_接口自动化之Python3_Requests之上传头像
  5. 如何将CSS应用于iframe?
  6. 答网友提问:使用 SAP Fiori Tools 创建的 Fiori Elements 应用,如何进行二次开发?
  7. 线性代数:矩阵运算常用公式
  8. STM32—雨滴检测传感器
  9. 在Word中,如何删除页眉页脚
  10. 云主机装黑果实践(5):重得到镜像和继续强化前置启动过程
  11. 【英语语法】句子类型
  12. 2月书讯 | 读新书,过新年。
  13. 基于微信小程序的新生自助报到系统设计与实现-计算机毕业设计源码+LW文档
  14. java计算机毕业设计智能办公管理系统源程序+mysql+系统+lw文档+远程调试
  15. 【CS224n】(lecture9)Transformer的变体
  16. STL详解(十二)—— unordered_set、unordered_map的介绍及使用
  17. 无聊软件-Tomm闪电文件搜索_已迁移
  18. 圣经究竟是一部什么书?
  19. 解决WebService超时问题
  20. 常用端口及端口关闭方法

热门文章

  1. 论文笔记——Adversarial Patch(对抗补丁)
  2. jquery通过身份证号获取性别和生日
  3. day198-2019-01-04-英语流利阅读-待学习
  4. Linux、Python第一次月考总结反思
  5. 超高速数据采集记录存储回放系统
  6. android自定义金额输入键盘_Android自定义软键盘的实现
  7. 软件测试人员的性格,软件测试人员需要具备那些性格特质?
  8. 游戏h5互动营销是什么?
  9. 编写python程序、利用循环输出_Python基础编程—用户输入和while循环
  10. 缓冲流、转换流、序列化流和打印流