Mybatisで実行SQLを取得する方法
MyBatisで実行SQLを取得する方法について説明します。
MyBatisで実行SQLをログに出力する方法
MyBatisでは、ConfigurationクラスのlogImplプロパティを使用して、実行SQLをログに出力できます。
以下は、testMyBatisConfigという設定クラスでログを出力する設定例です。
package com.example.config; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.Configuration; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class testMyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); Configuration configuration = new Configuration(); // Log4j2を使用してSQLログを出力する configuration.setLogImpl(org.apache.ibatis.logging.log4j2.Log4j2Impl.class); sessionFactory.setConfiguration(configuration); return sessionFactory.getObject(); } }
SQLを取得する方法
特定の場面で実行SQLを直接取得したい場合、MyBatisのSqlSessionやExecutorをカスタマイズする方法があります。
以下はtestSqlSessionというクラスを使った例です。
package com.example.mybatis; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.Configuration; public class testSqlSession { private final SqlSessionFactory sqlSessionFactory; public testSqlSession(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } public String getExecutedSql(String statement, Object parameter) { try (SqlSession session = sqlSessionFactory.openSession()) { Configuration configuration = session.getConfiguration(); MappedStatement ms = configuration.getMappedStatement(statement); BoundSql boundSql = ms.getBoundSql(parameter); return boundSql.getSql(); } } }
まとめ
- logImplを設定することで、自動的に実行SQLをログに出力できます。
- SqlSessionを利用して、手動で実行SQLを取得することも可能です。