mybatis |
您所在的位置:网站首页 › sastitle语句 › mybatis |
问题背景
通常我们开发的时候,需要联合控制台和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.StdOutImplMybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种方式: SLF4JApache Commons LoggingLog4j 2Log4jJDK loggingno 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: 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引入 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 # 设置 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 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |