V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hejw19970413
V2EX  ›  程序员

请教一下 Mybatis Mapper SQL

  •  
  •   hejw19970413 · 2 天前 · 833 次点击

    最近小弟在公司的要求下把项目的 SQL 适配到其他数据库上。 之前没搞过 Java,听同事稍微的讲了一下。 经了解项目是 SQL 用 MyBatis ,现在项目下有好多的 Mapper.xml 的 SQL 模板文件。 请问大家这 Mapper 怎么能把生成出来的 SQL 打印出来。 有什么好的办法我想学习一下

    15 条回复    2024-11-26 10:55:03 +08:00
    liuzhedash
        1
    liuzhedash  
       2 天前
    简单版:

    配置里面加
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    可以打印出 sql 模板和参数

    复杂版:
    https://github.com/p6spy/p6spy
    qq135449773
        2
    qq135449773  
       2 天前
    设置 mapper package 的 log level 为 debug
    wymisgod
        3
    wymisgod  
       2 天前
    看你们使用的什么日志实现。因为 Log4j 有安全漏洞,所以大概是三四年前之后,基本上都让换成 logback+slf4j 的日志打印方式了。
    这里又有分叉,一个是 logback 配置里没有配置日志打印 level 的,这个的话一般在 application.yml 或者 application.properties 里可以设置。
    另外一种是在 logback-spring.xml 里进行配置。这里又有分叉了,好多种可以修改打印日志级别的情况,说两个比较常规的,一个在该文件里找<appender>标签里包含 ch.qos.logback.core.ConsoleAppender 或者带 console 的,去看日志打印级别是否是 INFO ,修改为 DEBUG 即可。一个是<root>标签里的打印级别。
    还有一种情况就是 mybatis 配置的日志实现
    hejw19970413
        4
    hejw19970413  
    OP
       2 天前
    其实我是想直接把 SQL 给弄出来,不想去执行,因为还有一个要求是写个文档,领导要看,我要是执行的来说,里面有好多的判断啥的,得处理好多得查询条件。
    @wymisgod
    @liuzhedash
    @qq135449773
    wymisgod
        5
    wymisgod  
       2 天前
    @hejw19970413 初始开发人员不维护文档,现在想起来了要整,让你来维护,给领导说干不了。看这情况,估计 DDL 的上线应该也没有审核机制,早点跑
    Akitora
        7
    Akitora  
       2 天前 via Android
    环境变量设置 logging.level.xxx.mapper=DEBUG
    cobbage
        9
    cobbage  
       2 天前 via Android
    xml 里面不就是 sql ,除了参数条件
    billccn
        10
    billccn  
       2 天前
    既然用了 Mybatis 估计不是纯粹运行简单 SQL 而是至少有一些动态 SQL ,你也不运行代码的情况下是无法自动打出所有可能的 SQL 的,否则就是解决了 halting problem ,要不你把 Mapper.xml 人工分析一下。
    xuanbg
        11
    xuanbg  
       2 天前
    别想着打出完整的 SQL 语句。里面肯定有<if ...>xxx</if>之类的,条件不匹配就不会拼进 SQL 去执行,也就打不出来这部分查询条件。

    正确的做法还是学一下 xml 的写法,其实挺简单的。学会了再把 xml 翻译成 SQL 。
    LiaoMatt
        12
    LiaoMatt  
       1 天前
    写个 Mybatis 拦截器, 执行前打印 SQL
    hejw19970413
        13
    hejw19970413  
    OP
       1 天前
    @lpe234 这两个项目我试过了,解析不出来
    montaro2017
        14
    montaro2017  
       1 天前
    IDEA 有个 Mybatis Log Free 插件 https://plugins.jetbrains.com/plugin/17898-mybatis-log-free
    启用后可以查看到完整的 SQL
    montaro2017
        15
    montaro2017  
       1 天前
    @montaro2017 #14 要先开启 mybatis 的日志打印功能才有用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.