Mybatis 로그에 실행 쿼리 출력하기
2025. 1. 29. 00:23ㆍJava/mybatis
import java.util.List;
import java.util.Map;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
public List<Map<String, Object>> getList(Map<String, Object> where) {
// Get the MappedStatement
Configuration configuration = sqlSessionFactory.getConfiguration();
MappedStatement mappedStatement = configuration.getMappedStatement("test.getList");
// Get the BoundSql
BoundSql boundSql = mappedStatement.getBoundSql(where);
// Get the raw SQL
String rawSql = boundSql.getSql();
// Replace '?' placeholders with parameter values
String finalSql = replacePlaceholdersWithValues(rawSql, boundSql, configuration, where);
// Log the final SQL
log.debug("Executing SQL: {}", finalSql);
// Execute the query
return attachMapper.getList(where);
}
private String replacePlaceholdersWithValues(String rawSql, BoundSql boundSql, Configuration configuration, Map<String, Object> parameterObject) {
// Get the parameter values from the BoundSql
List<org.apache.ibatis.mapping.ParameterMapping> parameterMappings = boundSql.getParameterMappings();
if (parameterMappings == null || parameterMappings.isEmpty()) {
return rawSql; // No parameters, return the raw SQL
}
// Replace '?' with actual parameter values
for (org.apache.ibatis.mapping.ParameterMapping parameterMapping : parameterMappings) {
String propertyName = parameterMapping.getProperty();
Object value = parameterObject.get(propertyName); // Get the parameter value
String valueAsString = (value == null) ? "null" : "'" + value.toString() + "'";
rawSql = rawSql.replaceFirst("\\?", valueAsString); // Replace the first '?' with the value
}
return rawSql;
}
'Java > mybatis' 카테고리의 다른 글
Mybatis 실행쿼리 interceptor에 적용하기 (0) | 2025.01.29 |
---|---|
Mybatis 로그에 쿼리 찍히게 하기 (0) | 2025.01.28 |
Mybatis where절 if문으로 처리 (0) | 2025.01.19 |
Mybatis 쿼리 결과 출력하기 (0) | 2025.01.18 |
Mybatis 반복문 처리 (0) | 2025.01.15 |