티스토리 뷰

2022/jpa

day02[JPA new project]

yanii 2022. 11. 15. 17:51

(day01 복습)

JPA는 인터페이스이므로, JPA구현체는 hibernate이다.

insert -> persist

select -> find

update -> setter

delete -> remove

 

------------

JPA new project - 추가 해야 할 dependencies

 

application.properties

JPA는 mybatis(hikari)가 아닌 jdbc를 사용함.

 

#oracle

spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:oracle:thin:@localhost:1521:XE
spring.datasource.username=hr
spring.datasource.password=hr

 

#JPA dialect
#JPA는 특정 DBMS에 종속되어 있지 않기 때문에, 원하는 dialect로 설정하면 자동으로 번역해준다.
spring.jpa.database-platform=Org.hibernate.dialect.OracleDialect

#ddl 쓸 때 옵션
#create: 있는 테이블 다 드랍하고 create, 데이터 다 날아감// 테이블 삭제(DROP) 후 생성(CREATE)
spring.jpa.hibernate.ddl-auto=create
#create-drop: 있는 테이블 드랍하고 다시 만들고 다시 다 날림// 테이블 삭제(DROP) 후 생성(CREATE) 후 SqlSession 종료 시 삭제(DROP)
spring.jpa.hibernate.ddl-auto=create-drop
#update: 기존에 만들어놓거 컬럼하나 추가 되는 거// Entity 클래스와 DB 스키마 구조를 비교해서 DB쪽에 생성되지 않은 테이블, 컬럼 추가(삭제는 안 됨)
spring.jpa.hibernate.ddl-auto=update
#validate: 자바쪽에서 만들어논 테이블 검증, 오류가 생김, 실무에서 이거만 사용,// Entity 클래스와 DB 스키마 구조를 비교해서 같은지만 확인(다르면 예외 발생)
spring.jpa.hibernate.ddl-auto=validate

 

#JPA format
spring.jpa.properties.hibernate.format_sql=true //콘솔창에서 쿼리볼 수 있게 하기

#log
spring.output.ansi.enabled=always // 로고 색깔을 바꿔주는 설정(warn노랑/error빨강...)

#logging.level.org.hibernate.SQL=debug //디버깅할 때 sql문 나오게 하기

 

 

 

-----------------

pom.xml 추가

        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.1</version>
        </dependency>

 

resources/spy.properties - 일반 파일 추가

appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=took %(executionTime) ms | %(sql)
excludecategories=info,debug,result,resultset

메인 자바 폴더에서 config 패키지 생성

1.CustomP6spySqlFormat 클래스

public class CustomP6spySqlFormat implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        sql = formatSql(category, sql);
        return now + "|" + elapsed + "ms|" + category + "|connection " + connectionId + "|" + sql;
    }

    private String formatSql(String category,String sql) {
        if(sql ==null || sql.trim().equals("")) return sql;

        // Only format Statement, distinguish DDL And DML
        if (Category.STATEMENT.getName().equals(category)) {
            String tmpsql = sql.trim().toLowerCase(Locale.ROOT);
            if(tmpsql.startsWith("create") || tmpsql.startsWith("alter") || tmpsql.startsWith("comment")) {
                sql = FormatStyle.DDL.getFormatter().format(sql);
            }else {
                sql = FormatStyle.BASIC.getFormatter().format(sql);
            }
        }

        return sql;
    }
}

2.P6spySqlFormatConfiguration 클래스

@Configuration
public class P6spySqlFormatConfiguration {
    @PostConstruct
    public void setLogMessageFormat() {
        P6SpyOptions.getActiveInstance().setLogMessageFormat(com.example.baisc.config.CustomP6spySqlFormat.class.getName());
    }
}

'2022 > jpa' 카테고리의 다른 글

day03[벌크 연산, Repository, 쿼리메소드]  (0) 2022.11.30
day02[순수jpa, entity]  (0) 2022.11.15
day02[JPQL]  (0) 2022.11.15
day02[create table]  (0) 2022.11.15
day01[ORM,JPA,Hibernate Framework]  (0) 2022.11.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함