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編】

<お勧め書籍>