Spring Data JPA
자바 어플리케이션에서 관계형 데이터베이스 사용하는 방식을 정의한 인터페이스
Spring에서 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다.
JPA를 한단계 추상화시킨 Repository 인터페이스 제공
build.gradle 의존성 추가, 인터페이스를 정의하면 JPA의 CRUD 사용이 가능하다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
public interface PharmacyRepository extends JpaRepository<Pharmacy, Long> {
}
스프링부트 어플리케이션 구조
DAO (Data Access Object)
DB의 data에 접근하기 위한 객체
직접 DB에 접근하여 데이터 CRUD 하는 기능을 수행한다.
DB와의 connection 설정도 포함하는 경우도 있다.
의존성 결합을 낮추기 위한 디자인 패턴
인터페이스-구현체 구성으로 생성한다.
DTO (Data Transfer Object)
Controller, View, Business Layer 계층간 데이터 교환을 위한 Beans
getter, setter 메소드만 가진 클래스, 데이터 객체 (로직을 가지고 있지 않다)
DB의 데이터를 service나 Controller 등으로 보낼 때 사용하는 객체
Entity 객체를 그대로 사용하지 않는 이유?
- View 와 DB 레이어 역할 분리를 위해
- Entity 객체의 변경을 피하기 위해
- View와 통신하는 DTO 클래스는 자주 변경된다.
- 도메인 모델링을 지키기 위해
Entity
DB 테이블과 1:1 매핑되는 클래스로, DB 테이블 내에 존재하는 Column만 필드로 가져야한다.
DB에 없는 column을 선언하면 안된다.
Entity 클래스는 상속을 받으면 안된다. Core한 클래스.
구현 method는 주로 service layer에서 사용한다.
setter를 만들지 않고 builder를 사용한다.
- @Entity
- 테이블과 링크될 클래스
- 카멜 케이스 변수를 _ 형식으로 이름 지정
- @Id
- Primary Key 필드
- Long으로 선언한다
- @GeneratedValue
- PK의 생성 규칙
- auto_increment를 위해 GenerationType.IDENTITY 옵션 추가 필수
- @Column
- 테이블 컬럼 (필수X)
- @ManyToOne, @OneToMany
- 관계 매핑
- @NoArgConstuctor
- 기본 생성자
- @Getter
- 모든 필드에 Getter 메소드 자동 생성
- @Builder
- 생성자에 포함된 필드만 포함
@Getter
@NoArgsConstructor
@Entity
@Table(name = "member")
public class Member {
//필드
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id", unique = true, nullable = false)
private Long id;
@Column(length = 15, nullable = false)
private String name;
@Column(length = 100, nullable = false)
private String password;
@Column(length = 50, nullable = false)
private String email;
@Column(length = 20, nullable = false)
private String contact;
@OneToMany(mappedBy = "member", cascade = CascadeType.MERGE, orphanRemoval = true)
private List<Board> board = new ArrayList<>();
//빌더
@Builder
public Member(String name, String password, String email, String contact) {
this.name = name;
this.password = password;
this.email = email;
this.contact = contact;
}
}
빌더 메서드
빌더 패턴을 따르는 메서드
데이터 클래스를 사용할 때 생성자로 초기화할 경우 모든 필드에 값을 넣거나 명시적으로 null을 사용해야 한다.
=> 필요한 데이터만 설정할 수 있어 유연성을 확보할 수 있다.
Repository
DB Layer 접근자
인터페이스 생성 후 JpaRepository<Entity 클래스, PK 타입> 을 상속하면 기본적인 CRUD 메소드 자동 생성
public interface MemberRepository extends JpaRepository<Member, Long>{
}
참조
'개발공부 > JAVA Spring' 카테고리의 다른 글
troubleshooting - Failed to load ApplicationContext (0) | 2023.01.19 |
---|---|
Spring Data JPA 주의사항 - 영속성 컨텍스트 (0) | 2023.01.19 |
테스트 코드 작성 프레임워크 - Spock (0) | 2023.01.04 |
[springboot] redis, mariadb docker-compose (0) | 2022.12.18 |
[springboot] Spring Profile (0) | 2022.12.18 |
댓글