S2JDBC経由で発行されたSQLを確認する方法【個別SQL編】
今回は、S2JDBC経由で実際に発行されたSQLを確認する方法を紹介する。
JdbcManagerを利用して、SQLを実行した直後に、下記のコードを挿入すると、コンソールに実行したSQLが出力される。
SqlLogRegistry registry = SqlLogRegistryLocator.getInstance(); if (registry != null) { SqlLog sqlLog = registry.getLast(); System.out.println(sqlLog.getCompleteSql()); }
<実装例>
package jp.co.smp.sqllog.dao; import java.util.List; import javax.annotation.Resource; import jp.co.smp.sqllog.dto.EmpDto; import org.seasar.extension.jdbc.JdbcManager; import org.seasar.extension.jdbc.SqlLog; import org.seasar.extension.jdbc.SqlLogRegistry; import org.seasar.extension.jdbc.SqlLogRegistryLocator; public class EmpDao { @Resource protected JdbcManager jdbcManager; public List<EmpDto> getAllInfo(){ //↓↓↓↓↓ 出力対象となるSQL実行 ↓↓↓↓↓ List<EmpDto> results = jdbcManager.selectBySqlFile( EmpDto.class, "/jp/co/smp/sqllog/entity/sql/EMP_SELECT.sql", "E0002" ).getResultList(); //↑↑↑↑↑ 出力対象となるSQL実行 ↑↑↑↑↑ //↓↓↓↓↓ 直前で実行されたSQLの出力 ↓↓↓↓↓ SqlLogRegistry registry = SqlLogRegistryLocator.getInstance(); if (registry != null) { SqlLog sqlLog = registry.getLast(); System.out.println(sqlLog.getCompleteSql()); } //↑↑↑↑↑ 直前で実行されたSQLの出力 ↑↑↑↑↑ return results; } }
使用SQLファイルの内容
-- EMP_SELECT.sql -- 社員TBLから社員情報を取得するSQL -- @see EmpDao#getAllInfo -- @author xxxx select emp_id, emp_name from emp where emp_id = /*emp_id*/'D9999'
<コンソール出力結果>
-- EMP_SELECT.sql -- 社員TBLから社員情報を取得するSQL -- @see EmpDao#getAllInfo -- @author xxxx select emp_id, emp_name from emp where emp_id = 'E0002'
SQLファイルの「--」コメントも出力対象となるので、分かりやすいコメントを記述しておくと、デバッグ作業が楽になる。
今回はコンソールに出力する例を記載したが、「System.out.println」の部分をロガーに変更すれば、ログファイルに出力することも可能である。
<関連記事>
S2JDBC経由で発行されたSQLを確認する方法【個別SQL編】
S2JDBC経由で発行されたSQLを確認する方法【全SQL編】
<お勧め書籍>