mybatis-plus配置控制台打印完整带参数SQL语句的实现
问题背景
通常我们开发的时候,需要联合控制台和Navicat/PLSQL等工具进行语句的拼接检查,如果只是输出了一堆???,那么将极大降低我们的效率。因此我们需要输出完整的SQL语句以便调试。
update2020-July:新增官方p6spy打印分析sql语句方案
解决方案(StdOutImpl)
请注意:部分朋友反馈不生效,估计跟引入的包有一定关系,druid+mybatis-plus-boot-starter就亲测有用。请检查是否有log4j相关实现类。
如果是application.yml
#byzhengkai.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
- ApacheCommonsLogging
- Log4j2
- Log4j
- JDKlogging
- nologging
具体选择哪个日志实现由MyBatis的LogFactory内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。
static{ tryImplementation(LogFactory::useSlf4jLogging); tryImplementation(LogFactory::useCommonsLogging); tryImplementation(LogFactory::useLog4J2Logging); tryImplementation(LogFactory::useLog4JLogging); tryImplementation(LogFactory::useJdkLogging); tryImplementation(LogFactory::useNoLogging); }
不少应用服务器的classpath中已经包含CommonsLogging,如Tomcat和WebShpere,所以MyBatis会把它作为具体的日志实现。
记住这点非常重要。这意味着,在诸如WebSphere的环境中——WebSphere提供了CommonsLogging的私有实现,你的Log4J配置将被忽略。
这种做法不免让人悲摧,MyBatis怎么能忽略你的配置呢?事实上,因CommonsLogging已经存在,按优先级Log4J自然就被忽略了!
控制台输出
---[XNIO-1task-12]c.s.cms.controller.IndexController :username-admin-password-123456-****
CreatinganewSqlSession
SqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@708e9ffd]wasnotregisteredforsynchronizationbecausesynchronizationisnotactive
---[XNIO-1task-12]com.alibaba.druid.pool.DruidDataSource :{dataSource-1}inited
JDBCConnection[com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@62b13210]willnotbemanagedbySpring
==> Preparing:select*fromusertwheret.user_code='admin'andt.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-1522:14:32,2020-02-1823:38:51,MoshowKZHENG,123456,1,9,1,13,113,2020
<== Total:1
ClosingnontransactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@708e9ffd]
解决方案2(手写一个MybatisPlusOutImpl)
配置文件
mybatis-plus: configuration: #log-impl:org.apache.ibatis.logging.stdout.StdOutImpl #改为自己写的 log-impl:com.softdev.system.config.MybatisPlusOutImpl
java类MybatisPlusOutImpl
packagecom.softdev.system.config; importorg.apache.ibatis.logging.Log; /** *@DescriptionMybatisPlusOutImpl,直接使用控制台输出日志 *@Authorzhengkai.blog.csdn.net **/ publicclassMybatisPlusOutImplimplementsLog{ publicMybatisPlusOutImpl(Stringclazz){ System.out.println("MybatisPlusOutImpl::"+clazz); } publicbooleanisDebugEnabled(){ returntrue; } publicbooleanisTraceEnabled(){ returntrue; } publicvoiderror(Strings,Throwablee){ System.err.println(s); e.printStackTrace(System.err); } publicvoiderror(Strings){ System.err.println("MybatisPlusOutImpl::"+s); } publicvoiddebug(Strings){ System.out.println("MybatisPlusOutImpl::"+s); } publicvoidtrace(Strings){ System.out.println("MybatisPlusOutImpl::"+s); } publicvoidwarn(Strings){ System.out.println("MybatisPlusOutImpl::"+s); } }
官方解决方案p6spy
查看p6spy最新版本,请注意,该方案为侵入式的JDBC级方案。
pom.xml引入
p6spy p6spy 3.9.1
这是yaml版本,还没试过,待我实验一下.
spring: datasource: driver-class-name:com.p6spy.engine.spy.P6SpyDriver url: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 #设置p6spydriver代理 deregisterdrivers=true #取消JDBCURL前缀 useprefix=true #配置记录Log例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. excludecategories=info,debug,result,commit,resultset #日期格式 dateformat=yyyy-MM-ddHH:mm:ss #实际驱动可多个 #driverlist=org.h2.Driver #是否开启慢SQL记录 outagedetection=true #慢SQL记录标准2秒 outagedetectioninterval=2
到此这篇关于mybatis-plus配置控制台打印完整带参数SQL语句的文章就介绍到这了,更多相关mybatis-plus打印带参数SQL内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。