728x90

Programming 281

JPA - 엔티티 매핑

- 엔티티 매핑 1. 객체와 테이블 매핑 : @Entity, @Table 2. 필드와 컬럼 매핑 : @Column 3. 기본 키 매핑 : @Id 4. 연관관계 매핑 : @ManyToOne, @JoinColumn - @Entity 1. @Entity가 붙은 클래스는, JPA가 관리, 엔티티라 한다. 2. 기본 생성자는 필수다. (final, enum, interface, inner 클래스 사용 X) 3. @Entity의 속성으로 name을 사용할 수 있다. 3.1. JPA에서 사용할 엔티티 이름을 지정한다. 3.2. 기본값은 클래스 이름을 그대로 사용한다. @Entity(name = "ooo") @Table 1. @Table은 엔티티와 매핑할 테이블 지정한다. 2. 실제 DB에 있는 테이블명과 매칭할 때 ..

Programming/JPA 2023.07.14

JPA - 영속성 관리

- JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 - 엔티티 매니저 팩토리와 엔티티 매니저 - 영속성 컨텍스트 1. 엔티티를 영구 저장하는 환경 2. EntityManager.persist(entity); 3. 영속성 컨텍스트는 논리적인 개념 4. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 - 엔티티의 생명주기 1. 비영속(new/transient) 1.1. 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2. 영속(managed) 2.1. 영속성 컨텍스트에 관리되는 상태 3. 준영속(detached) 3.1. 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제(removed) 4.1. 삭제된 상태 - 비영속 - 영속 컨텍스트에 포함되어 있지 않고 객체..

Programming/JPA 2023.07.14

JPA - JPA 시작하기

- JPA 특징 1. JPA는 특정 데이터베이스에 종속하지 않는다. - 그림과 같이 Dialect 아래 여러가지 DB들이 종속되어 사용가능하다. 2. Hibernate.dialect의 경우 40가지 이상의 데이터베이스를 지원한다. - JPA 구동 방식 1. 프로젝트에서 설정한 Persistence.xml 파일에는 DB, DB 접속 관련 데이터들이 담겨있다. 2. EntityManagerFactory를 생성하면 DB와의 연결을 포함 대부분의 것들이 해결된다. 3. EntityManagerFactory 생성 이후 EntityManager을 생성하여 DB와 데이터를 주고 받는다. - Member 엔티티 생성 @Entity //관례상 @Table로 테이블 명을 작성해주지 않으면 클래스명이 테이블 명이 된다. p..

Programming/JPA 2023.07.12

Spring - 스프링 트랜잭션 전파2 - 활용

- 트랜잭션 전파 활용1 - 예제 프로젝트 시작 - 비즈니스 요구사항 1. 회원을 등록하고 조회한다. 2. 회원에 대한 변경 이력을 추적할 수 있도록 회원 데이터가 변경될 때 변경 이력을 DB LOG 테이블에 남겨야 한다. 2.1. 여기서는 예제를 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다. - Member @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; public Member() { } public Member(String username) { this.username = username; } } - JPA를 통해 관리하는 회원 엔티티이다..

Programming/Spring 2023.07.08

Spring - 스프링 트랜잭션 전파1 - 기본

- 스프링 트랜잭션 전파1 - 커밋, 롤백 package hello.springtx.propagation; import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annota..

Programming/Spring 2023.07.08

Spring - 스프링 트랜잭션 이해

- 스프링 트랜잭션 추상화 - JDBC 트랜잭션 코드 예시 public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConnection(); try { con.setAutoCommit(false); //트랜잭션 시작 //비즈니스 로직 bizLogic(con, fromId, toId, money); con.commit(); //성공시 커밋 } catch (Exception e) { con.rollback(); //실패시 롤백 throw new IllegalStateException(e); } finally { release(con); } } - JPA..

Programming/Spring 2023.07.07

Spring - 데이터 접근 기술 - 활용 방안

- 스프링 데이터 JPA 예제와 트레이드 오프 - 중간에서 JpaItemRepositoryV2 가 어댑터 역할을 해준 덕분에 ItemService 가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService 의 코드를 변경하지 않아도 되는 장점이 있다. - 선택지 1 1. 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 2. 실제 이 코드를 구현해야하는 개발자 입장에서 보면 중간에 어댑터도 만들고, 실제 코드까지 만들어야 하는 불편함이 생긴다. 3. 유지보수 관점에서 ItemService 를 변경하지 않고, ItemRepository 의 구현체를 변경할 수 있는 장점이 있다. 그러니까..

Programming/Spring 2023.07.07

Spring - 데이터 접근 기술 - 스프링 데이터 JPA

- 스프링 데이터 JPA 주요 기능 - 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 수많은 편리한 기능을 제공하지만 가장 대표적인 기능은 다음과 같다. 1. 공통 인터페이스 기능 2. 쿼리 메서드 기능 - 공통 인터페이스 기능 1. JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다. 2. 공통화 가능한 기능이 거의 모두 포함되어 있다. 3. CrudRepository 에서 fineOne() findById() 로 변경되었다. - JpaRepository 사용법 public interface ItemRepository extends JpaRepository { } 1. JpaRepository 인터페이스를 인터페이스 상속 받고, 제네릭에 관..

Programming/Spring 2023.07.07

Spring - 데이터 접근 기술 - JPA

- JPA 설정 - build.gradle 에 다음 의존 관계를 추가한다. //JPA, 스프링 데이터 JPA 추가 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - main - application.properties / test - application.properties 내용 추가 #JPA log logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE - JPA 적용1 - 개발 - Item - ORM 매핑 @Data @Entity public class Item { @Id @GeneratedV..

Programming/Spring 2023.07.04
728x90