객체 - 테이블 맵핑 : @Entity, @Table
필드 - 컬럼의 팹핑 : @Column
기본키의 맵핑 : @Id
조인 맵핑 : @ManyToOne, @JoinColumn
@Entity
@Entity 어노테이션을 클래스에 선언하면 그 클래스는 JPA가 관리한다. 그러므로 DB의 테이블과 Class(VO, DTO)와 맵핑한다면 반드시 @Entity를 붙여주어야 한다.
@Entity가 붙은 클래스에는 다음 제약사항이 필요하다.
- 필드에 final, enum, interface, class를 사용할 수 없다.
- 생성자중 기본 생성자가 반드시 필요하다.
@Entity의 속성
1. name : 엔티티 이름을 지정합니다. 기본값으로 클래스 이름을 그대로 사용한다.
@Table
@Table 어노테이션은 맵핑할 테이블을 지정한다.
@Table의 속성
1. name : 매핑할 테이블의 이름을 지정
2. catalog : DB의 catalog를 맵핑
3. schema : DB 스키마와 맵핑
4. uniqueConstraint : DDL 쿼리를 작성할 때 제약 조건을 생성
@Column
@Column 어노테이션은 객체 필드와 DB 테이블 컬럼을 맵핑한다.
@Column의 속성
1. name : 맵핑할 테이블의 컬럼 이름을 지정
2. insertable : 엔티티 저장시 선언된 필드도 같이 저장
3. updateable : 엔티티 수정시 이 필드를 함께 수정
4. table : 지정한 필드를 다른 테이블에 맵핑
5. nullable : NULL을 허용할지, 허용하지 않을지 결정
6. unique : 제약조건을 걸 때 사용
7. columnDefinition : DB 컬럼 정보를 직접적으로 지정할 때 사용
8. length : varchar의 길이를 조정합니다. 기본값으로 255가 입력
9. precsion, scale : BigInteger, BigDecimal 타입에서 사용, 각각 소수점 포함 자리수, 소수의 자리수를 의미
@Id
JPA가 객체를 관리할 때 식별할 기본키를 지정한다.
Lombok
기본적으로 웹 애플리케이션에서 사용하는 VO 객체는 , DB 테이블의 column 과 같은 이름의 private 변수를 가지고, getter setter 메소드를 정의 한 후 toString 메소드를 정의한다. 하지만 프로젝트가 커지면 커질수록 위에 말한 변수 , 메소드들이 기하급수적으로 늘어날 것이고, 늘어나면 늘어날 수록 추가도 귀찮을 뿐더러 관리도 힘들어져 결국에는 유지보수가 힘들어진다.
위의 문제를 타파한 라이브러리가 Lombok이다.
- @ToString
toString() 메소드를 생성한다. @ToString(exclude={“제외값”})으로 제외시키고 싶은 값을 설정할 수 있다. - @Getter , @Setter
getter() setter() 메소드를 생성한다. - @EqualsAndHashCode
equals(), hashCode() 메소드를 생성한다. - @RequiredArgsConstructor
모든 멤버 변수를 초기화시키는 생성자를 생성한다. - @Data
위에 언급한 5가지 어노테이션 설정을 모두 포함한다.
우선, @Getter 와 @Setter는 각각 접근자와 설정자 메소드를 작성해주는 Lombok 어노테이션으로 유명하다. 또한 생성자를 자동 생성해주는 Lombok 어노테이션에는
- @NorgsConstructor : 파라미터가 없는 기본 생성자 생성
- @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만들어 준다.
- @RequiredArgsConstructor : final이나 @NonNull 인 필드 값만 파라미터로 받는 생성자를 만들어 준다.
@EqualsAndHashCode
equals, hashCode 자동 생성
- equals : 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자
- hashCode : 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자
자바 bean에서 동등성 비교를 위해 equals와 hashcode 메소드를 오버라이딩해서 사용하는데,
@EqualsAndHashCode어노테이션을 사용하면 자동으로 이 메소드를 생성할 수 있다. callSuper 속성을 통해 eqauls와 hashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할지의 여부를 설정할 수 있다. @EqualsAndHashCode(callSuper = true)로 설정시 부모 클래스 필드 값들도 동일한지 체크하며, false(기본값)일 경우 자신 클래스의 필드 값만 고려한다.
https://deveric.tistory.com/54
https://medium.com/@dlaudtjr07/spring-boot-lombok-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%84%A4%EC%B9%98-71f9dbbc2f42
https://n1tjrgns.tistory.com/164
'Study > SpringBoot' 카테고리의 다른 글
[Spring Boot] JPA 동적 검색 (QueryDsl) (0) | 2022.05.16 |
---|---|
[Spring Boot] @NotNull, @NotEmpty, @NotBlank 의 차이점 및 사용법 (0) | 2022.05.10 |
스프링부트 시작부터 JSP 설정 실행까지 정리글 (0) | 2022.01.05 |
Entity, DTO, VO 알아보기 (0) | 2021.11.09 |
[SpringBoot] 스프링 부트 배치 (0) | 2021.11.05 |
댓글