티스토리 뷰
(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 |