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 |