Hibernate/SpringDataJPA

SpringDataJPA Query문 콘솔 출력 색상 및 줄개행, 파라미터 식별 등 가독성 설정

유혁스쿨 2023. 3. 17. 01:21
728x90
반응형

[build.gradle 파일] 코드 추가

	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

 

[ application.properties 파일 ] 코드 추가

# JPA의 구현체인 Hibernate가 동작하면서 발생한 SQL의 가독성을 높여준다.
#spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.highlight_sql=true
spring.jpa.properties.hibernate.validator.apply_to_ddl=false

 

[ P6SpyFormatter.java 파일 ] 클래스 생성

@Component  // 1
public class P6SpyFormatter extends JdbcEventListener implements MessageFormattingStrategy {

    @Override // 2
    public void onAfterGetConnection(ConnectionInformation connectionInformation, SQLException e) {
        P6SpyOptions.getActiveInstance().setLogMessageFormat(getClass().getName());
    }

    @Override // 3
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        StringBuilder sb = new StringBuilder();
        sb.append(category).append(" ").append(elapsed).append("ms");
        if (StringUtils.hasText(sql)) {
            sb.append(highlight(format(sql)));
        }
        return sb.toString();
    }

    private String format(String sql) {
        if (isDDL(sql)) {
            return FormatStyle.DDL.getFormatter().format(sql);
        } else if (isBasic(sql)) {
            return FormatStyle.BASIC.getFormatter().format(sql);
        }
        return sql;
    }

    private String highlight(String sql) {
        return FormatStyle.HIGHLIGHT.getFormatter().format(sql);
    }

    private boolean isDDL(String sql) {
        return sql.startsWith("create") || sql.startsWith("alter") || sql.startsWith("comment");
    }

    private boolean isBasic(String sql) {
        return sql.startsWith("select") || sql.startsWith("SELECT") ||
                sql.startsWith("insert") || sql.startsWith("INSERT") ||
                sql.startsWith("update") || sql.startsWith("UPDATE") ||
                sql.startsWith("delete") || sql.startsWith("DELETE");
    }
}

[적용 결과 사진]

결과사진

 

쿼리문의 키워드에 파란색으로 색상이 적용되고, 특정 키워드에 줄개행도 적용되며 파라미터도 확인이 가능해진다!!

728x90
반응형