본문 바로가기
728x90

springboot12

[JPA] 상속관계 매핑 관계형 데이터베이스는 상속관계 x 부모만 @Id를 가진다, @Entity는 모두 가진다 슈퍼타입, 서브타입이 객체 상속과 비슷하다 전략 조인전략 : 각각의 테이블을 조인 테이블 정규화 외래키 참조 무결성 제약조건 활용 가능 저장 공간 효율화 조회시 조인 사용하여 성능저하 데이터 저장시 Insert 쿼리 두번 이상 사용 정석!!!, 설계 깔끔!!!, 조인만 잘하면 되지!!! 중요하고 복잡한 비즈니스 로직!!! 단일테이블 전략 : 통합 테이블에서 단일 테이블로 = 성능좋다 조인이 없어서 빠른 성능 단순한 조회쿼리 자식 엔티티가 매핑한 컬럼은 모두 null 허용 테이블이 커질 수 있다 ⇒ 조회가 느려질 수도 있다 확장 가능성 없을 때!!! ~~클래스마다 테이블 전략 :구현 클래스마다 테이블~~ 슈퍼클래스 : .. 2021. 3. 4.
[JPA] jdbc에서의 Transaction 1. auto commit 모드 끄기 커넥션이 생성되면 바로 auto commit 모드로 세팅된다 즉, 각 SQL문이 완료되는 족족 commit된다. 그 다음 실행된다 완료 → commit → 실행 그래서 동시에 업데이트 하려면 auto commit 모드를 꺼야 한다 con.setAutoCommit(false); con : active connection 2. Transaction commit하기 auto commit 모드를 끄면 commit() 명령실행 전까지 commit하지 않는다 commit을 실행하면 현재 트랜잭션에서 모든 SQL명령들이 하나의 unit으로 반영된다 public void updateCoffeeSales(HashMap salesForWeek) throws SQLException { .. 2021. 3. 3.
[JPA] 엔티티타입 vs 값타입 종류 엔티티 타입 @Entity PK를 가진다 데이터가 변해도 식별자로 계속 추적가능한 것 값 타입 int, string... PK가 없다 (값 그 자체이므로...) 기본값 타입 (int, Integer, String...) 임베디드 타입 (사용자가 정의한다) 컬렌션 타입 (사용자가 정의한다) 1. 기본값 int, String 등의 기본타입 절대 공유되어서는 안되고 복사만 가능 immutable해야한다 2. 임베디드 타임 class Line { @Embedded private Sections sections; } @Embeddable class Sections { private List sections } embed된 객체의 멤버만 가져와서 사용 그냥 엔티티의 값이다 장점 재사용 가능하다 응집도가 높아진.. 2021. 3. 3.
스프링부트 @CreatedDate 직접 만들어 보기 오늘은 Entity를 데이터에 저장 시, 시간 정보를 자동으로 입력해주는 @CreatedAt를 직접 구현해보았습니다. 순수 도메인 로직의 테스트 코드를 작성하면서 Entity 객체에 @CreatedDate가 있는지 모르고 객체를 생성하여 null을 보고선 문득 내부적으로는 어떻게 동작을 하는지 궁금해졌습니다. 소스코드는 github에서 찾으실 수 있습니다. 1. 코드 검색을 해본 결과 stack overflow에서 원하던 답변을 찾을 수 있었습니다. 결론만 말하자면, Entity가 영속성 컨테스트에 의해 저장되기 전에 @PrePersist라는 콜백에 의해 객체에 직접 날짜를 입력하는 방법을 사용하고 있었습니다. 코드를 보면 아래와 같습니다. 먼저 Person이라는 클래스를 생성합니다. @ToString .. 2021. 1. 26.
Docker에서 MySQL 데이터 연동하기 1. Docker에서 MySQL 실행 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=db -e MYSQL_USER=user -e MYSQL_PASSWORD=1234 -v /Users/byeonggilpark/Desktop/db:/var/lib/mysql --name mysql mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci자세한 옵션들은 docker 공식 홈페이지의 mysql에서 확인 가능합니다 -d : 백그라운드에서 실행 -p : 포트 설정 -e : 환경변수 설정 -v : 볼륨 설정 (mysql의 데이터 저장소 설정) -name : 컨테이.. 2020. 11. 29.
Swagger2 설정하기 Dependency implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' SwaggerConfig @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket swaggerApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(swaggerInfo()).select() .apis(RequestHandlerSelectors.basePackage("com.nextloop.nearlog")) .paths(PathSelector.. 2020. 7. 15.
728x90