본문 바로가기

두두의 IT

String Boot Model Annotation

728x90
@Entity
@JsonIdentityInfo(generator=xxxGenerator.class)
@Data
	@ToString(exclude={"xxx","xxx"})
@Id
@GenericGenerator(name="xxx", strategy="xxx")
@GeneratedValue(generator="xxx")
@Column(name="xxx", nullable=false, length=00)
@JsonView(View.Xxx.Class)
@OneToMany(mappedBy = "xxx", cascade = CascadeType.ALL)

 

@Entity

  • 실제 DB의 테이블과 매칭될 클래스
  • JPA에서는 @Entity 어노테이션을 통해 자동으로 테이블을 생성해줌
  • 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭. ex) ProjectMember → project_member

[주의사항]

  • PK는 Long 타입의 Auto_increment를 사용하도록 하고, 주민등록번호 같은 비즈니스상의 유니크 키나 복합키 등은 다음과 같은 이유 때문에 유니크 키로 별도로 추가하는 것을 권장한다.
    1. FK를 맺을 때 다른 테이블에서 복합키 전부를 갖고 있거나 중간 테이블을 하나 더 둬야 하는 상황이 발생
    2. 인덱스에 좋지 않은 영향을 미침
    3. 유니크한 조건 변경시 PK 전체 수정이 필요할 가능성 존재
  • Entity 클래스와 기본 Entity Repository는 밀접한 관계를 맺고 있으므로 함께 관리하도록 한다.
  • Builder와 Getter/Setter (tistory.com)


@JsonIdentityInfo(generator=xxxGenerator.class)

  • Jackson 2.0 이상에서 사용 가능
  • Jackson에서 양방향 관계(Bidirectional Relationship)로 맺어진 객체에서 무한 재귀가 발생하는 문제를 해결하는 어노테이션
  • 직렬화에 포함 시킬 속성 값을 ‘property’ 속성에 지정해서 해결
  • generator = xxxGenerator.class : 순환 참조시 사용할 Id를 생성하는데 사용되는 클래스


@Data

  • 아래의 어노테이션들을 한꺼번에 설정해주는 어노테이션 
    • @ToString(exclude={"xxx","xxx"}) - 해당 메소드의 모든 필드를 출력하는 toString 메소드를 생성합니다.
      • exclude : 특정 필드를 toString() 결과에서 제외시킴
    • @EqualsAndHashCode - hashcode와 equals 메소드를 생성합니다.
    • @Getter / @Setter - 말 그대로 getter함수와 Setter 함수를 생성합니다.
    • @NoArgsConstructor - 파라미터를 요구하지 않는 생성자를 생성합니다. (access =AccessLevel.PROTECTED) 를 추가하게 될 경우 기본생성자의 접근 권한을 protected로 제한하게 됩니다. 
    • @RequiredArgsConstructor - 파라미터를 요구하는 생성자를 생성합니다. 
    • @AllArgsConstructor - 모든 인자를 가진 생성자를 생성합니다. 
    • @RequiredArgsContructor - 필요한 멤버만 받는 생성자를 생성합니다.
      • @NonNull - 어떤 멤버가 필요한지 지정
  • 이렇게 언급한 어노테이션을 삽입하게 될 경우, Class안에는 보이지 않지만 객체에서 사용할 수 있는 메소드들이 정의됩니다.
  • DTO를 간편하게 작업 할 수 있음


@Id

  • 객체의 Primary Key


@GenericGenerator(name="xxx", strategy="xxx")

https://techblog.woowahan.com/2607/

 

데이터 베이스의 자동증가 값을 기본키로 사용할 수 없을때는? | 우아한형제들 기술블로그

{{item.name}} 안녕하세요. 비즈상품 개발팀 권순규 입니다. 작년에 입사한 이후로 매번 주변 동료분들에게 배움을 얻기만 해왔는데, 이번에는 배운 내용을 공유해보고자 합니다. 이제껏 해온 기본

techblog.woowahan.com

 

@GeneratedValue(generator="xxx")

  • primary key 값을 위한 자동 생성 전략


@Column()

  • 객체 필드와 DB 테이블 컬럼을 맵핑
    1. name : 맵핑할 테이블의 컬럼 이름을 지정 ("str")
    2. insertable : 엔티티 저장시 선언된 필드도 같이 저장
    3. updateable : 엔티티 수정시 이 필드를 함께 수정
    4. table : 지정한 필드를 다른 테이블에 맵핑
    5. nullable : NULL을 허용할지, 허용하지 않을지 결정 (false, true)
    6. unique : 제약조건을 걸 때 사용
    7. columnDefinition : DB 컬럼 정보를 직접적으로 지정할 때 사용
    8. length : varchar의 길이를 조정합니다. 기본값으로 255가 입력 (00)
    9. precsion, scale : BigInteger, BigDecimal 타입에서 사용, 각각 소수점 포함 자리수, 소수의 자리수를 의미


@JsonView(View.Xxx.Class)

  • @Controller 어노테이션을 사용하면 기본적으로 view이름(페이지명)을 리턴하므로 문자열 형태의 데이터를 반환하기 위해 사용되는 것 중 하나

//mybatis
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

'두두의 IT' 카테고리의 다른 글

[AngularJS] 문법  (0) 2022.05.30
[JPA] 원하는 매개변수로 findBy 메소드 생성하기  (0) 2022.05.26
MAC + Flutter + xCode 설치  (0) 2022.05.18
String Boot Controller Annotation  (0) 2022.05.17
intelliJ Web Project 폴더 분석  (0) 2022.05.16