프로그래밍/스프링

[스프링] 7. Object Relational Mapping

riroan 2022. 8. 2. 18:03

지난시간에 DTO를 위해 Object Mapping이 자동적으로 적용된다는 사실을 알게 되었다.

Object Mapping은 데이터 전송을 위한 객체를 json으로 변환해주는 작업이었는데 이번엔 데이터베이스에 자동으로 매핑해주는 Object Relational Mapping(ORM)을 알아보려고 한다.

 

Object Mapping : Object $\leftrightarrow$ Json

Object Relational Mapping(ORM) : Object $\leftrightarrow$ Relation(Table)

 

ORM을 모르는 상태라면 데이터베이스를 조작하기 위해 SQL문법을 배우고 직접 사용하며 해당 언어와 데이터베이스를 연결하는 라이브러리를 알아야 한다. (실제로 내가 ORM을 몰라서 SchoolJoon프로젝트를 진행할 때 이렇게 했다....)

하지만 ORM을 알고 나면 객체의 함수 호출만으로 SQL문을 상당부분 대체할 수 있다. (모두는 아닌것 같다.)

 

// domain/User.java

@Entity
@Table(name="\"user\"")
public class User {
    @Id
    @GeneratedValue
    private Long id;
    @NonNull
    private String name;
    @NonNull
    private String email;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    private LocalDateTime deletedAt;
}

클래스를 하나 만들고 Entity어노테이션을 붙이면 완성된다. (필요에 따라 롬복 추가)

이렇게 클래스를 정의하면 데이터베이스의 한 테이블의 스키마를 정의한 것과 같다.

즉, 평소라면 create table ...라고 쓴 sql문을 클래스 정의 하나로 끝낸 것이다. (wow)

 

ORM

 

어노테이션

@Id : 테이블 안에는 기본키가 존재해야 한다. 기본키임을 나타내는 어노테이션이다.

@GeneratedValue : 튜플을 생성할 때마다 기본키를 자동으로 1씩 증가시키며 넣어준다. (sql의 auto increment와 같음)

@NonNull : 빈값이면 안된다. (sql의 Not Null과 같음)

@Table(name) : 테이블명을 정하는 어노테이션이다. user테이블이 기본적으로 있다 해서 "user" 테이블로 변경했다.

 

참고로 NonNull어노테이션이 있는 필드는 롬복의 @RequiredArgsConstructor를 사용하면 생성자의 인자로 만들 수 있다.

 

java에서 ORM은 JPA사용이 국룰인듯 하다.

앞으로 JPA를 사용해서 데이터베이스를 다뤄볼 예정이다.

'프로그래밍 > 스프링' 카테고리의 다른 글

[스프링] 9. 쿼리메소드  (0) 2022.08.10
[스프링] 8. JPA  (0) 2022.08.04
[스프링] 6. 테스트코드 작성  (0) 2022.08.02
[스프링] 5. Lombok  (0) 2022.07.22
[스프링] 4. Object Mapper  (0) 2022.07.18