spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging.level:
org.hibernate.SQL: debug
# org.hibernate.type: trace #스프링 부트 2.x, hibernate5
# org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6
show_sql : 옵션은 System.out 에 하이버네이트 실행 SQL을 남긴다. org.hibernate.SQL : 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다
쿼리 파라미터 로그 남기기 - 스프링 부트 3.0 -
<aside> <img src="/icons/code_green.svg" alt="/icons/code_green.svg" width="40px" />
참고: 실제 코드에서는 DB에 소문자 + _(언더스코어) 스타일을 사용하겠다
</aside>
실무에서는 가급적 Getter는 열어두고, Setter는 꼭 필요한 경우에만 사용하는 것을 추천
Setter를 막 열어두면 가까운 미래에 엔티티가 도대체 왜 변경되는지 추적하기 점점 힘들어진다.
그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야 한다.
JPA 스펙상 엔티티나임베디드 타입( @Embeddable )은 자바 기본 생성자(default constructor)를 public 또는 protected 로 설정해야 한다. → public 으로 두는 것 보다는 protected 로 설정하는 것이 그나마 더 안전하다.
컬렉션은 필드에서 바로 초기화 하는 것이 안전하다.
private List<Item> items = new ArrayList<>();
스프링 부트 신규 설정 (엔티티(필드) 테이블(컬럼))
개발 순서: 서비스, 리포지토리 계층을 개발하고, 테스트 케이스를 작성해서 검증, 마지막에 웹 계층 적용