[Spring] ORM - 스프링 데이터와 스프링 데이터 JPA

개발log·2024년 4월 19일

Spring

목록 보기
16/16
post-thumbnail

스프링 데이터와 스프링 데이터 JPA

  • 스프링 데이터 : 비즈니스 로직에 더 집중할 수 있게 데이터베이스 사용 기능을 클래스 레벨에서 추상화한 것
  • 스프링 데이터 JPA : 스프링 데이터의 공통적인 기능에서 JPA의 유용한 기술이 추가된 기술

메서드 호출로 엔티티 상태 변경 예

엔티티의 상태 직접 관리, 필요한 시점에 커밋을 해야 함

@PersistenceContext
EntityManager em;

public void join() {
	// 기존에 엔티티 상태를 바꾸는 방법(메서드 호출해서 상태 변경)
    Member member = new Member(1L, "홍길동");
    em.persist(member);
}

기본 CRUD 메서드를 사용하기 위한 JpaRepository 예

  • 리포지토리 역할을 하는 인터페이스를 만들어 데이터베이스의 테이블 조회, 수정, 생성, 삭제 작업을 간단히 수행 가능
  • JpaRepository 인터페이스를 만든 인터페이스에서 상속 받고, 제네릭에는 관리한 <엔티티 이름, 엔티티 기본키의 타입>을 입력하면 기본 CRUD를 사용할 수 있음
public interface MemberRepository extends JpaRepository<Member, Long> {
}

예제 코드

  1. @Entity : 클래스의 객체를 JPA가 관리하는 엔티티로 지정 - 이름을 지정하지 않으면 클래스 이름과 같은 테이블에 매핑

  2. protected 기본 생성자 : 엔티티는 반드시 기본 생성자가 있어야함. public 보다는 proctected가 안전하므로 protected 기본 생성자로 생성

  3. @Id : Long 타입의 id 필드를 테이블의 기본키로 지정

  4. @GeneratedValue : 기본키 생성 방식 결정

  5. @Column : 데이터베이스의 칼럼과 필드 매핑

@Entity //1. 엔티티로 지정
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 2. 기본 생성자
@AllArgsConstructor
@Getter
public class Member {
    @Id // 3. Id 필드를 기본키로 지정
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 4. 기본키를 자동으로 1씩 증가
    @Column(name = "id", updatable = false)
    private Long id; //DB 테이블의 'id' 칼럼과 매칭

    @Column(name = "name", nullable = false) // 5. name이라는 not null 칼럼과 매핑
    private String name; //DB 테이블의 'name' 칼럼과 매칭
}

클래스 이름과 다른 테이블 매핑

name 파라미터로 Article 클래스와 member_list 테이블 매핑하기 예

Entity(name = "member_list") // 'member_list' 라는 이름을 가진 테이블과 매핑
public class Article {
	//... 생략 ...
}

자동키 생성 설정 방식

  • AUTO : 선택한 데이터베이스 방언(dialect)에 따라 방식을 자동으로 선택(기본값)
  • IDENTITY : 기본키 생성을 데이터베이스에 위임(=AUTO_INCREMENT)
  • SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본키를 할당하는 방법, 오라클에서 주로 사용
  • TABLE : 키 생성 테이블 사용

@Column 애너테이션의 속성

  • name : 필드와 매핑할 컬럼 이름, 설정하지 않으면 필드 이름으로 지정
  • nullable : 컬럼의 null 허용 여부, 설정하지 않으면 true(nullable)
  • unique : 컬럼의 유일한 값(unique) 여부, 설정하지 않으면 false(non-unique)
  • columnDefinition : 컬럼 정보 설정, default값을 줄 수 있음
profile
나의 개발 저장소

0개의 댓글