【问题标题】:How to log the sql query generated behind the scene from querydsl using mysemma如何使用 mysemma 记录从 querydsl 后台生成的 sql 查询
【发布时间】:2017-05-19 01:28:43
【问题描述】:

使用 mysemma 的 querydsl 时自动生成的 sql 查询的任何最佳显示方式,以便在使用 querydsl 时可以轻松查看这些 sql 查询并轻松调试 sql 查询。

例如:from(qCustomer).where(qCustomer.custId.eq("1"));

我需要知道后台生成的 sql 并想记录,以便我可以轻松调试我的应用程序。

【问题讨论】:

  • 您是否尝试过使用休眠配置属性? stackoverflow.com/questions/2536829/hibernate-show-real-sql
  • 是的 Dmitry 我将此属性配置为 true,但我也无法看到生成的 sql。我希望在 java 端有任何方法或在 mysemma querydsl 端有任何属性。
  • 记录器级别可能存在问题。请查看链接上的记录器配置。

标签: hibernate spring-data-jpa querydsl mysema


【解决方案1】:

Spring boot 用户,将下方添加到 application.properties 或等效 yaml 文件以启用 QueryDsl 日志。

logging.level.com.querydsl.sql=DEBUG

参考 - AbstractSQLQuery's logQuery()

【讨论】:

  • 我用的是JPA,所以需要配置logging.level.com.querydsl.jpa=DEBUG
【解决方案2】:

请在您的 application.properties 文件中添加以下设置并检查。

spring.jpa.show-sql=true

我看到使用上述设置生成的 SQL。 仅供参考,我正在使用 Spring Data JPA 和 QueryDSL 4.1.3

【讨论】:

    【解决方案3】:

    例子:

     SQLQuery<String> sqlQuery = factory
            .select(stringTemplate)
            .from("table")
            .where(areaIdPath.eq(13L));
    
      sqlQuery.setUseLiterals(true);
    
      String sql = sqlQuery.getSQL().getSQL();
    

    设置UseLiterals = true,然后getSQL()会生成带有参数的sql。

      Set whether literals are used in SQL strings instead of parameter bindings (default: false)
     
      <p>Warning: When literals are used, prepared statement won't have any parameter bindings
      and also batch statements will only be simulated, but not executed as actual batch statements.</p>
    

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2019-01-04
      • 2017-01-02
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多