개발 무지렁이

[Spring Boot] ORM의 표준스펙 JPA 및 엔티티(Entity) 본문

Backend/스프링부트

[Spring Boot] ORM의 표준스펙 JPA 및 엔티티(Entity)

Gaejirang-e 2022. 11. 25. 12:45

ORM(Object Relational Mapping)


객체와 '관계형 데이터베이스'의 데이터를 자동으로 매핑해주는 도구를 말한다.

📍. 쿼리문 대신 ☕자바코드로 데이터베이스의 데이터를 처리할 수 있다.
📍. 내부에서 안전한 SQL 쿼리 자동 생성

JPA(Java Persistence API): 🧱 ORM 프레임워크의 표준 스펙


Java를 기반으로 한 객체 관계 매핑 기술을 말한다.

📍. 객체 지향 프로그래밍 모델관계형 데이터베이스 사이의 불일치를 해결하기 위해 개발 📍. 개발자가 SQL쿼리를 직접 작성하지 않아도 된다.
📍. JPA를 구현한 실제 클래스: Hibernate

❓ SQL쿼리문
```
insert into question(subject, content) values('안녕하세요', '가입인사 드립니다^^');
```

☕ Java
```
Question q = new Question();
q.setSubject("안녕하세요");
q.setContent("가입인사 드립니다^^");
```

엔티티(Entity)


데이터베이스 테이블매핑되는 ☕ 자바 클래스를 말한다

[Question.java]

  @Getter
  @Setter
  @Entity
  public class Question {
      @Id // 기본키 지정
      @GeneratedValue(strategy = GenerationType.IDENTITY) // 1씩 자동증가
      private Integer id;

      @Column(length = 200) // 글자수 제한 200
      private String subject;

      @Column(columnDefinition = "TEXT") // 글자수를 제한 X
      private String content;

      private LocalDateTime createDate;

      @OneToMany(mappedBy="question", cascade = CascadeType.REMOVE) // 참조엔티티의 속성명: question, CascadeType.REMOVE: 질문을 삭제하면 답변들도 모두 삭제
      private List<Answer> answerList;
  }

[Answer.java]

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

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

      private LocalDateTime createDate;

      @ManyToOne // '질문' 하나당 '답변' 여러개로 구성될 수 있다, 실제 데이터베이스에서 ForeignKey 관계 생성
      p Question question;
  }

Comments