当前位置: 首页 > news >正文

spring boot 整合mybatis 无法输出sql的问题

使用spring boot整合mybatis,测试功能的时候,遇到到了sql问题,想要从日志上看哪里错了,但是怎么都无法输出执行的sql,我使用的是log4j2,百度了一下,很多博客都说,加上下面的日志配置:


        <logger name="java.sql.Statement" level="debug"/>
        <logger name="java.sql.PreparedStatement" level="debug"/>
        <logger name="java.sql.Connection" level="debug"/>
        <logger name="ResultSet" level="debug"/>

经实际测试,没什么用。只好去官网找解决方案,在mybatis日志上看到,如果存在内置日志,就是用内置的日志,自己配置的日志就忽略了。

MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。

     
不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的 MyBatis 会把它作为日志工具,记住这点非常重要。这将意味着,在诸如 WebSphere 的环境中,它提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。MyBatis 将你的 Log4J 配置忽略掉是相当令人郁闷的(事实上,正是因为在这种配置环境下,MyBatis 才会选择使用 Commons Logging 而不是 Log4J)。如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中,而你又想使用其它日志工具,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择别的日志工具。

<configuration>
  <settings>
    ...
    <setting name="logImpl" value="LOG4J"/>
    ...
  </settings>
</configuration>
      
     
logImpl 可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是实现了接口 org.apache.ibatis.logging.Log 的,且构造方法是以字符串为参数的类的完全限定名。(译者注:可以参考org.apache.ibatis.logging.slf4j.Slf4jImpl.java的实现)

所以我就创建了一个mybatis-config文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="logImpl" value="LOG4J2"/>
    </settings>
</configuration>

配置mybatis:

mybatis:
  type-aliases-package: com.demo
  mapper-locations: classpath:mapper/*.xml
  configuration:
    cache-enabled: true
    lazy-loading-enabled: true
    multiple-result-sets-enabled: true
    default-executor-type: simple
    default-statement-timeout: 25000
    
  config-location: classpath:mybatis-config.xml

然而启动的时候报错:

aused by: java.lang.IllegalStateException: Property 'configuration' and 'configLocation' can not specified with together
    at org.springframework.util.Assert.state(Assert.java:73) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:377) ~[mybatis-spring-1.3.2.jar:1.3.2]
    at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:547) ~[mybatis-spring-1.3.2.jar:1.3.2]
    at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:153) ~[mybatis-spring-boot-autoconfigure-1.3.2.jar:1.3.2]
    at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$8eb42bd5.CGLIB$sqlSessionFactory$0(<generated>) ~[mybatis-spring-boot-autoconfigure-1.3.2.jar:1.3.2]
    at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$8eb42bd5$$FastClassBySpringCGLIB$$1132516e.invoke(<generated>) ~[mybatis-spring-boot-autoconfigure-1.3.2.jar:1.3.2]
    

报错信息说configuration和configLocation不能同时存在,所以我就想两个功能一定是相同的,只不过配置方式不一样,一个是xml,一个是spring boot的风格,所以我就删掉了config-location,在configuration下面找到了一个log-impl,加上这个配置之后,问题就解决了,如下:

mybatis:
  type-aliases-package: com.demo
  mapper-locations: classpath:mapper/*.xml
  configuration:
    cache-enabled: true
    lazy-loading-enabled: true
    multiple-result-sets-enabled: true
    default-executor-type: simple
    default-statement-timeout: 25000
    log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl

输出日志:

 ==>  Preparing: select prodid,prodname,isgroupinsur,isdtbprod from bx_product where prodid in ( 1 , 2 , 3 ) 
 ==> Parameters: 
<==      Total: 0

只要加这个配置就能解决问题了。

相关文章:

  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 动态魔术使用DBMS_SQL
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • 接力10G,25G将成为数据中心首选解决方案
  • Redash本地开发环境搭建
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • Chrome 被曝 0day 漏洞,可让黑客获取用户数据
  • Linux权限管理(week1_day5)--技术流ken
  • 基于ArcFace2.0+红外双目摄像头的活体检测 [Windows][C#][.NET][WPF]
  • Android 架构优化~MVP 架构改造
  • python列表,字典,集合
  • 关于移动端页面在手机调整字体大小后无法正常显示(已解决)
  • 一位90后的自述:如何从年薪3w到30w
  • POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解
  • Docker下部署自己的LNMP工作环境
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP--网络协议分层,http历史(二)
  • JavaScript 基础知识 - 入门篇(一)
  • Java的Interrupt与线程中断
  • MySQL-事务管理(基础)
  • Node 版本管理
  • webgl (原生)基础入门指南【一】
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 规范化安全开发 KOA 手脚架
  • 聚类分析——Kmeans
  • 离散点最小(凸)包围边界查找
  • 深度学习中的信息论知识详解
  • 我是如何设计 Upload 上传组件的
  • 延迟脚本的方式
  • 如何用纯 CSS 创作一个货车 loader
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • !$boo在php中什么意思,php前戏
  • ()、[]、{}、(())、[[]]命令替换
  • (70min)字节暑假实习二面(已挂)
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (剑指Offer)面试题34:丑数
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)德国人的记事本
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • **PHP二维数组遍历时同时赋值
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RequestBody与@ResponseBody的使用
  • @RestControllerAdvice异常统一处理类失效原因
  • [ C++ ] STL---仿函数与priority_queue
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色