java - 如何查看 myBatis 真正使用的 SQL 查询?

标签 java sql xml oracle mybatis

由 myBatis 创建的查询因 ORA-00933“SQL 命令未正确结束”而失败。

我在网上找到的所有建议都说 SQL 语法存在一些错误。另一方面,如果我手工编写 SQL,Oracle SQL 开发人员会将其视为正确的 SQL。

显然,我手工制作的方式与 myBatis 不同。我需要检查一下。 但是如何检查 myBatis 是否真的向数据库发送了 SQL 查询?

使用的MyBatis版本:3.0

<小时/>

我对自己寻找问题的可能性更感兴趣,而不是针对每个问题寻求帮助。但这里有些人认为问题必须包含代码,所以就在这里。 (mapper.xml)

<sql id="pracovisteSql">
    /* pozor, pracuje pouze do max 3 vrstev v cis_pracovist */
    cis_pracoviste A
        join cis_pracoviste B
            on (A.stupen_rizeni in (0,1) and B.kod_nadrizeneho = A.kod_pracoviste) or
                (A.stupen_rizeni = 2 and A.kod_pracoviste = B.kod_pracoviste)
        join cis_pracoviste C
            on (B.stupen_rizeni = 1 and C.kod_nadrizeneho = B.kod_pracoviste) or
                (B.stupen_rizeni = 2 and C.kod_pracoviste = B.kod_pracoviste)
</sql>
<sql id="organizaceSql">
    WITH organizace
    AS (
        SELECT a.kod_pracoviste as AKP, a.nazev as ANZ, a.stupen_rizeni as AST, a.kod_nadrizeneho as ANR,
                b.kod_pracoviste as BKP, b.nazev as BNZ, b.stupen_rizeni as BST, b.kod_nadrizeneho as BNR,
                c.kod_pracoviste as CKP, c.nazev as CNZ, c.stupen_rizeni as CST, c.kod_nadrizeneho as CNR
            from
            <include refid="pracovisteSql"/>
    )
</sql>
<sql id="zahajeniOdDo">
    (r01.dat_zahajeni between to_date(#{mesicRokOd}, 'MMYYYY') and to_date(#{mesicRokDo, 'MMYYYY'))
</sql>
<select id="getReportSR02Sql1"
        parameterType="amcssz.spr.srv.main.dto.reports.ReportSR02QueryDTO"
        resultType="amcssz.spr.srv.main.dto.reports.ReportSR02Sql1DTO">
    <include refid="organizaceSql"/>
    SELECT Count(Distinct (r01.id_r01_rizeni)) as pocetVRSP     
        From organizace
            Left join r01_rizeni r01
                on organizace.ckp = r01.kod_pracoviste and
                    r01.je_stornovano = 0 and
                    <include refid="zahajeniOdDo"/> and
                    r01.kod_skup_rizeni = 'VRSP'                  /* r01.kod_rizeni in ('VRSPUC', 'VRSPSR', 'VRSPPE', 'VRSPJI') */
            Join r02_stavrizeni r02
                on R01.ID_R01_RIZENI = R02.ID_R01_RIZENI and      /* Změna 17.1.2020 */
                R02.JE_AKTUALNI = '1' and
                R02.KOD_STAV_RIZENI != 'STR'
            Join r08_ukon r08
                on R01.ID_R01_RIZENI = R08.ID_R01_RIZENI and      /* Změna 17.1.2020 */
                R08.KOD_UKON IN ('1','14','23','32') and          
                R08.JE_STORNOVAN = '0'
            Join d02_obalka d02
                on R08.ID_R08_UKON = D02.ID_R08_UKON and          
                d02.dat_doruceni   IS NOT NULL                    
        Where organizace.AKP = #{kodPracoviste} and
            r01.kod_skup_rizeni is Not Null
        Group by r01.kod_skup_rizeni
        Order by 1;
</select>

最佳答案

您可以配置 log4j 级别以显示 mybatis 日志记录,例如 log4j.logger.org.mybatis.example=DEBUG

完整文档可在 here 找到

关于java - 如何查看 myBatis 真正使用的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60147546/

相关文章:

java - 在 Spring 中有条件地应用拦截器

java - Solr Faceting - 忽略构面计数中没有值的字段

java - 未收到 PathChildrenCache 上的删除事件

SQL Where Column1 = Column1 将只返回非空值

sql - SQL Server 将空值插入非空列时如何设置默认值?

java - 如何取消 Google App Engine 插件的身份验证?

python - SQLAlchemy with_for_update 读取陈旧数据

c# - 访问 xml 节点值

java - 将 AsyncAppender 添加到 log4j.properties

python - 如何在odoo 8中打印组的外部ID?