- @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 해당 클래스는 엔티티라고 부른다.
- final, enum, interface, inner 클래스는 엔티티로 사용할 수 없다.
- 테이블의 기본키(primary key)로 설정하는 어노테이션 이다.
- 기본키(primary key)의 생성 전략을 명시하는데 사용한다.
- IDENTITY : 기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 할당하지 않아도 AUTO_INCREMENT를 하여 기본키를 생성해준다. @GeneratedValue(strategy = GenerationType.IDENTITY)
- DB 테이블의 column을 맵핑할 때 사용한다.
- 속성
- name : 맵핑할 column의 이름을 지정해준다.
- nullable : null 허용 여부를 설정해준다.
- length : Column 속성의 길이를 설정해준다.
- 엔티티 매핑에서 Enum 타입을 사용할 때 선언한다.
- EnumType.STRING: enum 이름 값을 DB에 저장 (필수)
- EnumType.ORIGINAL: enum 순서(숫자) 값을 DB에 저장 (기본값이지만 enum 데이터가 추가되면 순서가 변경되므로 사용금지)
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가 연관관계의 주인이 된다)
- 자바 객체를 HTTP 응답 바디에 맵핑해준다.
- ResponseEntity에 자바 객체를 넣어 반환하거나 위 어노테이션을 설정하고 자바 객체를 직접 반환해도 된다.
- controller에 이 어노테이션을 설정하면 HTTP 응답 바디에 자바 객체를 맵핑해준다.(모든 반환값을 @ResponseBody 한 것과 같음)
- 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") 같이 직접 지정해줘도 된다.
- 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} 출력 }