発行されるSQLを確認する

最終更新日: 2021年3月11日
R8 | R9

log4j2.xml

log4j2.xmlに下記の行を追加することで、system.logに実行したSQLが出力されます。

  1. wagbyapp\webapps\$(APPNAME)\WEB-INF\classes\log4j2.xml ファイルをテキストエディタで開きます。
  2. Loggers 要素以下に、次の行を含めます。
    <Logger name="org.hibernate.SQL" level="DEBUG">
      <AppenderRef ref="C"/>
      <AppenderRef ref="F"/>
    </Logger>
  3. Webアプリケーションを再起動します。logs\system.log に SQL が記録されます。

hibernate.cfg.xml

ビルドしたアプリケーションの hibernate.cfg.xml を変更することで、Hibernate が生成する HQL を直接、確認する方法を説明します。

  1. wagbyapp\webapps\$(APPNAME)\WEB-INF\classes\hibernate.cfg.xml ファイルをテキストエディタで開きます。
  2. 同ファイルの property 要素を変更します。
    <hibernate-configuration>
      <session-factory>
        ...
        <property name="show_sql">true</property>
        ...
      </session-factory>
    </hibernate-configuration>
    
  3. Webアプリケーションを再起動します。Tomcat を起動したコンソールに HQL が表示されます。(logs\catalina.out にも同時に記録されます。)

プレースホルダの扱い

出力されるSQLは次のような形になります。これは正確には、Hibernate が扱う HQL です。

select jgroupid_0_."userid" as userid1_61_0_, jgroupid_0_."jgroupid" as jgroupid2_56_0_, jgroupid_0_."jgroupidjshid" as jgroupid3_0_ from "juser$jgroupid" jgroupid_0_ where jgroupid_0_."userid"=?

where 句の条件部は '?' となります。実際の値は表示されません。

ワンポイント

'?' に値が含まれた SQL は、データベース側のログで確認するようにしてください。

SQL発行数のカウント9.0.0

1つの画面操作で発行されるSQL数を把握する方法を説明します。

  1. wagbyapp/webapps/wagby/WEB-INF/classes/jfcbase.properties を修正します。次の行を有効にします。
    jp.jasminesoft.jfc.JFCUtils.isOutputStatusToConsole=true
    
  2. wagbyapp/webapps/wagby/WEB-INF/classes/hibernate.cfg.xml を修正します。show_sql を true にします。
    <hibernate-configuration>
      <session-factory>
        ...
        <property name="show_sql">true</property>
        ...
      </session-factory>
    </hibernate-configuration>
    
  3. wagbyappを起動します。いろいろな操作を行います。
  4. miscフォルダで次のコマンドを入力します。
    ant analyze-sql
  5. 次のようにメソッドごとのテーブルアクセス数と、トータルアクセス数が表示されます。
         [java] Wagby: 08-30-20 14:39:43 mainMenu 
         [java] Wagby: 08-30-20 14:39:46 myShowListJfcportal Search_Condition
         [java] 08-30-20 14:41:44 mainMenu 
         [java] 08-30-20 14:41:44 showListJuser 
         [java] 08-30-20 14:41:50 showListJuser Search_Condition
         [java] jfcjobschedule               1
         [java] jfcportlet                   1
         [java] jfcpreferenceitem            1
         [java] jprincipal                   1
         [java] jprincipal$jpermission_id   30
         [java] juser                        5
         [java] juser$jgroupid               1
         [java] juser$jprincipal_id          1
         [java] juser$preference_item        1
         [java] juser$rule                   1
         [java] 08-30-20 14:43:03 showListJuser 
         [java] jcategory                1
         [java] jgroup                   1
         [java] jholiday                 1
         [java] juser                    3
         [java] juser$jgroupid           4
         [java] juser$jprincipal_id      4
         [java] juser$old_passwds        4
         [java] juser$preference_item    4
         [java] juser$rule               4
         [java] 08-30-20 14:43:16 showJuser Show:userid:admin
         [java] juser                    2
         [java] juser$jgroupid           3
         [java] juser$jprincipal_id      3
         [java] juser$old_passwds        3
         [java] juser$preference_item    3
         [java] juser$rule               3
         [java] 08-30-20 14:49:59 showListJuser Send
         [java] jgroup                   1
         [java] juser                    1
         [java] juser$jgroupid           2
         [java] juser$jprincipal_id      2
         [java] juser$old_passwds        2
         [java] juser$preference_item    2
         [java] juser$rule               2
         [java] 08-30-20 14:50:11 mainMenu 
         [java] 08-30-20 14:50:11 ShowListJfcportal 
         [java] === Total report ===
         [java] jcategory                    1
         [java] jfcjobschedule               1
         [java] jfcportal                    1
         [java] jfcportal$disableDnd         1
         [java] jfcportal$usePortal          1
         [java] jfcportlet                   1
         [java] jfcpreferenceitem            1
         [java] jgroup                       2
         [java] jholiday                     1
         [java] jprincipal                   1
         [java] jprincipal$jpermission_id   30
         [java] juser                       11
         [java] juser$jgroupid              10
         [java] juser$jprincipal_id         10
         [java] juser$old_passwds            9
         [java] juser$preference_item       10
         [java] juser$rule                  10
         [java] line count=102
         [java] totalSize=101
    

仕様

  • ../wagbyapp/logs/catalina.out ファイルを開き、"Hibernate:" ではじまる行を探します。from XXX の XXX 名をキーにカウントしています。
  • 副問合せが含まれた、1つのSQLに複数の from 句がある場合は最初のSQLだけが対象です。
  • 開発機でのみ利用できます。