Back-End/JPA(자바 ORM 표준 기술) 8

jpa - 간단하게 수업을 듣고 알게된 점.

현업에서는 데이터베이스에 fk(외래키)를 설정하지 않고 사용하는 경우가 많다고 한다. (확실하게 이부분은 더 공부를 하고 작성해보도록 하겠다 ~) jpa 엔티티 매핑, 엔티티 관계 설정만 잘 해주면 된다고 한다. querydsl은 복잡한 쿼리문을 처리하기 위해서 사용되고 이때는 insert문은 지원하지 않는다고 한다. service 단에서는 조회를 제외한 나머지 작업들에는 @Transactional을 달아주어야 한다고 한다. controller부에서 해당 entity를 그대로 넘겨주는 것은 바람직하지 않다.(DB와 매우 근접하게 있는 entity를 컨트롤러 레이어까지 노출시키기 때문이다. ) 이를 해결하기 위해서는 필요한 엔티티 필드만을 넣은 DTO를 사용해서 DTO를 넘겨줄 수 있도록하자. [생성자가 ..

[JPA][엔티티 매핑] - 엔티티 매핑

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 1. @Entity 2. @Table 3. 다양한 매핑 사용 4. 데이터베이스 스키마 자동 생성 5. DDL 생성 기능 6. 기본 키 매핑 7. 필드와 컬럼 매핑: 레퍼런스 @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙어야 한다. @Entity가 붙은 클래스의 경우엔 JPA가 관리하는 것으로, 엔티티라고 부른다. @Entity 적용 시 주의사항 기본 생성자는 필수다. 파라미터가 없는 public 또는 protect 생성자 엔티티 객체를 생성할 때 기본 생성자를 사용해서 JPA는 생성하기에 이 생성자는 반드시 있어야 한다. 없다면 기본 생성자를 자동으로 만들어 준다. (..

[JPA][영속성 관리] - CURD로 알아보는 영속성 컨텍스트의 필요성과 이점

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. 엔티티 조회 2. 엔티티 등록 3. 엔티티 수정 4. 엔티티 삭제 5. 준영속의 상태 변화 엔티티 CURD를 통해 영속성 컨텍스트가 왜 필요한지 알아보도록 하자 엔티티 조회(READ) 영속성 컨텍스트 내부에 캐시를 가지고 있는데 이것을 1차 캐시라 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다. 키: 식별자 값 / 값: 엔티티 인스턴스 1차 캐시에서 조회 find( )로 호출하면 1차 캐시에서 엔티티를 찾고 없다면 데이터베이스에서 조회한다. 데이터베이스에서 조회 1차 캐시가 없으므로 데이터베이스에서 조회한다. 조회한 데이터로 엔티티를 생성해 1차 캐시에 저장한다(영속 상태가 된다.) 조회한 엔티티를 반..

[JPA][영속성 관리] - 영속성 컨텍스트

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. 영속성 컨텍스트란? 2. 엔티티의 생명주기 3. 영속성 컨텍스트 특징 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경으로 데이터베이스와는 다른 개념이다. 엔티티 매니저로 엔티티를 저장, 조회하게 되면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 정확하게 표현하면 엔티티 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장한다고 해야 한다. 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 생성할 때 하나 만들어진다. (여러 엔티티가 같은 영속선 컨텍스트에 접근할 수도 있다) 엔티티 매니저를 통해 접근하고 관리할 수 있다. 엔티티의 생명주기 엔티티에는 4가지의 상태가 존재한다. 비영속..

[JPA][영속성 관리] - 엔티티 매니저 팩토리와 엔티티 매니저

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. JPA 제공 기능 2. 엔티티 매니저 팩토리 3. 엔티티 매니저 JPA 제공 기능 엔티티와 테이블을 매핑하는 설계 부분 매핑한 엔티티를 실제 사용 부분 엔티티 매니저 팩토리와 엔티티 매니저로 어떻게 사용하는지 알 수 있다. 엔티티 매니저 팩토리 데이터 베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다. 엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 공장을 만드는 것에 비유하며 이 경우는 비용이 매우 많이 든다. 엔티티 매니저 팩토리를 생성했다면 이제..

[JPA][JPA 시작] - JPA 애플리케이션 개발 시작

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. JPA 애플리케이션 시작 코드 2. 엔티티 매니저 설정 3. 트랜잭션 관리 4. 비지니스 로직 JPA 애플리케이션 시작 코드 package jpabook.jpashop; import jpabook.jpashop.domain.member.Member; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.*; import java.util.List; public class JpaMain..

[JPA][JPA 시작] - 객체 매핑

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. 객체 매핑이란? 2. 매핑 정보 3.persistence.xml 설정 객체 매핑이란? SQL에서 사용할 테이블과 자바 클래스를 매핑해주어야 한다. JPA를 사용하기 위해서는 회원 테이블과 회원 클래스를 매핑해주어야 한다. 매핑 정보 매핑 정보 회원 객체(클래스) 회원 테이블 클래스와 테이블 Member MEMBER 기본 키 id ID 필드와 컬럼 username NAME 필드와 컬럼 age AGE 회원 객체(클래스) package jpabook.jpashop.domain.member; import lombok.Getter; import lombok.Setter; import javax.persistence..

[JPA][JPA 시작] - 기본 설정

📖본 포스팅은 '자바 표준 ORM 기술 JPA - 김영한'님의 책을 보고 작성되었습니다. 목차 1. 기본 설정 2. H2 설치 기본 설정 Java 11 1.8도 가능하지만 11이 버전이 더 높기에 11로 사용해도 무관하다고 한다. 라이브러리 관리 도구 Gradle version(spring) 2.7.9 dependency Spring web Lombok Thymeleaf H2 Database build.gradle plugins { id 'org.springframework.boot' version '2.7.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'jpabook' version = '0.0.1..