mybatis-plus配置控制台打印完整带参数SQL语句的实现

 更新时间:2020年08月25日 11:46:35   作者:Moshow郑锴  
这篇文章主要介绍了mybatis-plus配置控制台打印完整带参数SQL语句,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

问题背景

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

update 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]
 

解决方案2(手写一个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);
 }
}

官方解决方案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.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
# 设置 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语句的文章就介绍到这了,更多相关mybatis-plus 打印带参数SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Swing实现坦克大战游戏

    Java Swing实现坦克大战游戏

    这篇文章主要介绍了Java Swing实现坦克大战游戏,文中有非常详细的代码示例,对正在学习java的小伙伴们有很大的帮助哟,需要的朋友可以参考下
    2021-05-05
  • Java基础教程之包(package)

    Java基础教程之包(package)

    这篇文章主要介绍了Java基础教程之包(package),本文详细讲解了包的创建、使用等方法,需要的朋友可以参考下
    2014-08-08
  • Java中数组的定义与使用详解

    Java中数组的定义与使用详解

    这篇文章主要给大家介绍了关于Java中数组的定义与使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • Java并发Map面试线程安全数据结构全面分析

    Java并发Map面试线程安全数据结构全面分析

    本文将探讨如何在Java中有效地应对这些挑战,介绍一种强大的工具并发Map,它能够帮助您管理多线程环境下的共享数据,确保数据的一致性和高性能,深入了解Java中的并发Map实现,包括ConcurrentHashMap和ConcurrentSkipListMap,及相关知识点
    2023-09-09
  • SpringBoot实现自定义事件的方法详解

    SpringBoot实现自定义事件的方法详解

    这篇文章将用实例来和大家介绍一下如何在SpringBoot中自定义事件来使用观察者模式。文中的示例代码讲解详细,对我们学习SpringBoot有一定的帮助,需要的可以参考一下
    2022-06-06
  • Java实现将数字日期翻译成英文单词的工具类实例

    Java实现将数字日期翻译成英文单词的工具类实例

    这篇文章主要介绍了Java实现将数字日期翻译成英文单词的工具类,结合完整实例形式分析了Java日期转换与字符串操作相关实现技巧,需要的朋友可以参考下
    2017-09-09
  • 浅谈JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    浅谈JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    这篇文章主要介绍了JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 一文详解spring注解配置bean的初始化方法和销毁方法

    一文详解spring注解配置bean的初始化方法和销毁方法

    本篇我们讲解下spring项目中如何为bean指定初始化方法和销毁方法。当spring完成bean的属性赋值之后,就会执行bean的初始化方法,而当spring要销毁bean实例的时候,也会调用bean的销毁方法。文中有详细的代码实例,需要的朋友可以参考下
    2023-05-05
  • Maven 不同环境灵活构建的步骤

    Maven 不同环境灵活构建的步骤

    在项目开发过程中,合理地使用Maven管理不同的构建环境(开发、测试、生产)是提高项目管理效率和应对复杂项目需求的关键,本文就来介绍一下Maven 不同环境灵活构建的步骤,感兴趣的可以了解一下
    2024-10-10
  • Spring Security中successHandler无效问题及解决

    Spring Security中successHandler无效问题及解决

    这篇文章主要介绍了Spring Security中successHandler无效问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论