지난시간에 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)
어노테이션
@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 |