[Spring] 어노테이션 정리

박준형·2023년 8월 31일
1

Spring

목록 보기
1/17

📌Domain

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 해당 클래스는 엔티티라고 부른다.
  • final, enum, interface, inner 클래스는 엔티티로 사용할 수 없다.

@Id

  • 테이블의 기본키(primary key)로 설정하는 어노테이션 이다.

@GeneratedValue

  • 기본키(primary key)의 생성 전략을 명시하는데 사용한다.
  • IDENTITY : 기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 할당하지 않아도 AUTO_INCREMENT를 하여 기본키를 생성해준다. @GeneratedValue(strategy = GenerationType.IDENTITY)

@Column

  • DB 테이블의 column을 맵핑할 때 사용한다.
    • 속성
      • name : 맵핑할 column의 이름을 지정해준다.
      • nullable : null 허용 여부를 설정해준다.
      • length : Column 속성의 길이를 설정해준다.

@Enumrated

  • 엔티티 매핑에서 Enum 타입을 사용할 때 선언한다.
  • EnumType.STRING: enum 이름 값을 DB에 저장 (필수)
  • EnumType.ORIGINAL: enum 순서(숫자) 값을 DB에 저장 (기본값이지만 enum 데이터가 추가되면 순서가 변경되므로 사용금지)

@ManyToOne / @OneToMany

Member 객체

@Entity
@ToString
@Getter @Setter
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="coordinator_id")   
    private Long id;
    
    @OneToMany(mappedBy = "member")
    private List<Board> boards = new ArrayList<>();
}

Member를 외래키로 가지는 Board 객체

@Entity
@ToString
@Getter @Setter
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "board_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "member")
    private Member member;


}
  • mappedBy 옵션으로 연관관계의 주인을 설정해준다. (mappedBy를 정의하지 않은 객체가 주인)
  • 일반적으로 외래키를 가지는 객체를 주인으로 정한다. (그래서 위 코드에서 Board가 연관관계의 주인이 된다)

📌Controller

@ResponseBody

  • 자바 객체를 HTTP 응답 바디에 맵핑해준다.
  • ResponseEntity에 자바 객체를 넣어 반환하거나 위 어노테이션을 설정하고 자바 객체를 직접 반환해도 된다.

@RestController

  • controller에 이 어노테이션을 설정하면 HTTP 응답 바디에 자바 객체를 맵핑해준다.(모든 반환값을 @ResponseBody 한 것과 같음)

@RequestParam

  • URL 상에서 데이터를 찾는다.
  • /test?name=spring&price=20000 이면 변수이름과 파라메터 이름이 같은거끼리 매칭된다.
@GetMapping("/test")
	public void info(@RequestParam String name, @RequestParam int price) {
		System.out.println(name); // spring 출력
		System.out.println(price); // 20000 출력
	}
  • @RequestParam("name") 같이 직접 지정해줘도 된다.

@RequestBody

  • HTTP 요청 바디 부분의 데이터를 자바 객체로 변환해준다.
// name, price를 갖는 Book 객체
@Getter @Setter
public class Book {
    private String name;
    private int price;
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}
@PostMapping("/test")
	public void age(@RequestBody Book book) {
		System.out.println(book); // Book{name="spring", price=20000} 출력
	}
profile
으쌰 으쌰

0개의 댓글

관련 채용 정보