Spring JPA: 어노테이션(@) 정리

2023. 8. 24. 22:50[WEB]/[React-Spring] TeamHs

🍃 Entity에서 사용하는 어노테이션

1. @Entity

  • JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션이다.
  • 해당 어노테이션으로 인해 JPA가 해당 클래스를 관리하게 된다.
속성 기능
name JPA에서 사용할 엔티티 이름 지정
name을 쓰지 않을 경우 (default) 클래스이름을 엔티티 이름으로 지정
주의 사항
  • 기본 생성자가 꼭 필요
  • final, enum, interface, innter class에서는 사용 불가
  • 필드(변수)를 final로 선언 불가

2. @Table

  • 엔티티와 매핑할 테이블을 지정해준다.
  • name 속성에 매칭할 테이블명을 적어준다.
속성 기능
name 매핑할 테이블 이름
생략시 엔티티 이름(@Entity(name="~") 사용
catalog catalog 기능이 있는 DB에서 catalog 매핑
schema schema기능이 있는 DB에서 schema 매핑
uniqueContraints DDL 생성시 유니크 제약조건 생성
 스키마 자동 생성 기능을 사용해 DDL을 만들 때만 사용

 

3. @ID

  • 특정 속성(컬럼)을 기본키(PK)로 지정하는 어노테이션이다.
  • 본인의 예시로 boardId가 테이블에 기본키로 지정되어 있으므로 boardId 위에 @ID 어노테이션을 지정해주었다.
속성 기능
@GeneratedValue(startegy = GenerationType.IDENTITY) 기본 키 생성을 DB에 위임 (Mysql)
@GeneratedValue(startegy = GenerationType.SEQUENCE) DB시퀀스를 사용해서 기본 키 할당 (ORACLE)
@GeneratedValue(startegy = GenerationType.TABLE) 키 생성 테이블 사용 (모든 DB 사용 가능)
@GeneratedValue(startegy = GenerationType.AUTO) 선택된 DB에 따라 자동으로 전략 선택

4. @Column

  • 객체 필드를 테이블의 컬럼과 매핑하는 역할을 한다.
  • nullable을 사용하여 null값이 가능한지를 체크하고, name을 통해 컬럼명과 일치시켜준다.
속성 기능
name 필드와 매핑할 테이블의 컬럼 이름 지정
default는 필드이름으로 대체
insertable true : 엔티티 저장시 필드값 저장
false : 필드값이 저장되지 않음
updatable true : 엔티티 수정시 값이 수정
false : 엔티티 수정시 값이 수정 되지 않음
table 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용
nullable  null값 허용 여부 설정
false : not null 제약 조건
unique 컬럼에 유니크 제약조건 부여
columnDefinition 데이터베이스 컬럼 정보를 직접 부여
length 문자 길이 제약조건
String 타입일 때 사용
precision, scale BigDecimal 타입에서 사용
precision : 소수점을 포함한 전체 자릿수 설정
scale : 소수의 자릿수

5. @Access

  • JPA가 엔티티 데이터에 접근하는 방식을 지정한다.
  • Access를 설정하지 않으면 기본키를 설정하는 @Id를 기준으로 접근 방식을 설정한다.
접근 방식 기능
AccessType.FILED 필드에 직접 접근
필드 접근 권한이 private여도 접근 가능
AccessType.PROPERTY getter를 통해 접근

6. @Enumerated

  • 자바 enum 타입을 매핑할 때 사용한다.
속성 기능
value EnumType.ORDINAL : enum 순서를 DB에 저장 EnumType.STRING : enum이름을 DB에 저장

7. @Temporal

  • 날짜 타입을 매핑할 때 사용한다.
속성 기능
value TemporalType.DATE : 날짜, DB date 타입과 매핑(예 : 2020-02-12)
TemporalType.TIME : 시간, DB time 타입과 매핑(예: 12:12:12)
TemporalType.TIMESTAMP : 날짜와 시간 DB timestamp타입과 매핑(예 : 2020-02-12 12:12:12)

8. @Lob

  • DB BLOB, CLOB 타입과 매핑 필드 타입이 문자열이면 CLOB, 나머지는 BLOB을 매핑한다.

9. @Transient

  • DB에 저장하지도 조회하지도 않는다. 객체에 임시로 값을 보관하고 싶을 때 사용한다.

 

 

🍃 Lombok 라이브러리에서 제공하는 어노테이션

1. @Getter, @Setter

  • 자동으로 Getter와 Setter를 생성해준다.
  • 필드 레벨이 아닌 클래스 레벨에 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성된다.

2. @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

  • 생성자를 자동 생성해준다.
  • NoArgs는 파라미터가 없는 기본 생성자를 만들어주고, AllArgs는 모든 필드 값을 파라미터로 받는 생성자를 만들어준다.
  • RequiredArgs는 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어준다.

3. @ToString

  • toString 메소드를 자동으로 생성해준다.
  • exclude 속성을 사용하면, 특정 필드를 toString에서 제외시킬 수 있다.

4. @EqualsAndHashCode

  • equals와 hashCode 메소드를 자동으로 생성해준다.

5. @Data

  • 위에 말한 것들을 한꺼번에 설정해주는 어노테이션이다.

 

🍃 그 외 Spring

1.  @GetMapping, @PostMapping, DeleteMapping, PutMapping

  • Get, Post, Delete, Put을 매핑해준다. 뒤에는 요청받을 Url를 작성할 수 있다.

2.  @RequestMapping

  • 요청을 특정 메서드와 매핑하기 위해 사용한다.
  • value(요청받을 url)와 method(Get, Post ,Put, Delete 등) 부분을 사용하게 된다.

예시 @RequestMapping(value = "/hello", method = RequestMethod.GET)

 

1번과 2번을 합쳐서 RequestMapping에는 공통적으로 사용할 url을 작성해주고, 아래에 각 메서드에 맞는 Mapping을 작성해준다. 추가할 url만 추가해주면 된다.

 

이렇게 되면 댓글 작성 url은 /comment/write이고 메서드는 Post가 된다.

댓글 리스트 조회는 /comment/list/{boardID}가 되고 메서드는 Get이 된다.

3.  @AutoWired

  • 스프링 컨테이너에 등록한 빈에게 의존관계 주입이 필요할 때, DI(의존성 주입)을 도와주는 어노테이션이다.
  • 스프링 컨테이너에 빈들을 모두 등록한 후에, 의존성 주입 단계가 이루어지는데 @Autowired가 부여된 메서드가 실행되며 필요한 인스턴스를 주입해준다.

4.  @Service, @Controller, @RestController, @Repository

  • 각 컴포넌트 클래스의 역할을 명확하게 구분해주는 역할을 한다.
반응형

'[WEB] > [React-Spring] TeamHs' 카테고리의 다른 글

React에서 css 적용하는 방법  (0) 2023.08.26
개발 진행도  (0) 2023.08.24
WEB : Repository 클래스 에러  (0) 2023.08.24
useNavigate() 에러 해결  (0) 2023.08.23
페이지 이동 Route  (0) 2023.08.15