java spring(2) JPA구조 살펴보기

yujin kim·2024년 9월 30일

이번에 jpa를 통해 DB테이블을 생성하고

question , answer 패키지를 아래와 같이 생성해주고

Question.java
Answer.java 이름에 자바클래스 파일을 생성 해줍니다.

Answer.java 파일코드

package com.AdA.backend.answer;

import java.time.LocalDateTime;

import org.springframework.data.annotation.CreatedDate;

import com.AdA.backend.question.Question;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;

import lombok.Getter;
import lombok.Setter;


@Getter
@Setter
@Entity

public class Answer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(columnDefinition = "TEXT")
    private String content;

    @CreatedDate
    private LocalDateTime createDate;

    @ManyToOne
    private Question question;

}

Question.java 파일코드

package com.AdA.backend.question;

import java.time.LocalDateTime;
import java.util.List;

import com.AdA.backend.answer.Answer;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(length = 200)
    private String subject;

    @Column(columnDefinition = "TEXT")
    private String content;

    // 필드 이름을 createdDate로 수정
    private LocalDateTime createdDate;

    @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
    private List<Answer> answerList;
}

파일에 그대로 파일에 위와같은 코드를 수정해줍니다.
그러면 실제로 JPA 형식으로 복잡한 SQL 쿼리문 작성없이 DB테이블이 생성된겁니다.

👉왜 JPA를 사용해야될까?

JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있고 , 코드의 가독성 및 유지보수의 향상 , 데이터베이스 독립성 , 객체와 데이터베이스간의 매핑 , 자동화 된 데이터베이스 처리 다양한 측면에서 CRUD 작업을 처리하기에 편리 하기 때문에 사용 합니다.

코드를 순차적으로 살펴볼건데

Answer.java, Question.java 클래스 파일에

사용되었던 , JPA 속성을 살펴볼거다.
@Getter , @Setter , @Entity 3개의 이노테이션 속성이 클래스 위에 있다.

각각의 어노테이션은 코드의 가독성을 높이고 , 개발자의 반복적인 작업을 줄여주는 데 도움을 준다.

Lombok : @Getter 와 @Setter

간단하게 생각하면 불필요한 코드 작성을 막아준다. 클래스 필드에 대해 자동으로 getter와 setter 매서드를 생성 해준다.
Entity_ 어노테이션은 테이블 처럼 취급 할 수 있다.

또한

@Id

primary key(기본키)로 취급

@GeneratedValue

기본키의 값을 어떻게 생성할지를 지정

@ManyToOne

한 엔터티가 여러개의 엔터티와 연결할수있는 일대 다 관계를 말함.
간단하게 외래키단하게 외래키(Foreign Key)를 말한다.

@CreatedDate

생성된 날짜와 시간을 자동으로 생성해주는 속성 (게시판,채팅)에 사용

column(length(=200)

컬럼 200자 내외로 길이 제한을 한다.

@속성의 이름을 지정해주고 private를 작성하고 , 그다음 컬럼에 자료형을 적어주고 컬럼의 명을 작성하면 컬럼이 자동으로 만들어진 것 이다.

@column (추가적인 속성)
private String name; 이런식으로 작성하면 컬럼이 생성된것이다.

👉각각의 클래스를 확인하여 어떠한 컬럼이 만들어졌는지 확인하기

각각의 클래스 jpa 파일을 살펴보면

👉Answer.java

import로 필요한 라이브러리들을 불러와주고,
id , content , createtime , question 컬럼 4개를 만들어 주었다.

👉Question.java

마찬가지로 import로 필요한 라이브러리를 불러와준다.
id, subject , content , createdDate , answerList 컬럼 5개를 만들어주었다.

이렇게 까지 하면 jpa를 통한 CRUD 구성의 DB 구축이 완료 되었다.

추가적으로 질문 사항이 있으시면
discord : youjininny_ 로 연락주시면 됩니다.

profile
에러제조기 좀좀따리 지식...

0개의 댓글