프로그래밍/스프링

[스프링] 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