스프링부트를 공부하면서 자주 사용되는 어노테이션 중 몇 가지를 간단히 설명하겠습니다. 이 어노테이션들은 주로 Java 클래스의 속성을 다룰 때 유용하게 사용됩니다.
Bag bag = Bag.builder()// Builder 어노테이션으로 생성된 빌더 클래스 생성자
.name("name")
.money(1000)
.memo("memo")
.build(); // build() 가 객체를 생성해 돌려줌
@RestController // Rest API를 구현하므로 RestController 사용
@RequestMapping("test") // 리소스
public class TestController {
@GetMapping
public String testController(){
return "Hello World!";
}
@GetMapping("/testGetMapping") // /test/testGetMapping
public String testControllerWithPath(){
return "Hello World! testGetMapping";
}
}
@GetMapping("/{id}")
public String testControllerWithPathVariables(@PathVariable(value = "id", required = false) int id){
return "Hello World ID" + id;
}
@GetMapping("/testRequestParam")
public String testControllerWithPathVariables(@RequestParam(value = "id", required = false) Integer id){
return "Hello World ID" + id;
}
@Data
public class TestRequestBodyDTO {
private int id;
private String message;
}
@RestController // Rest API를 구현하므로 RestController 사용
@RequestMapping("test") // 리소스
public class TestController {
@GetMapping("/testRequestBody")
public String testControllerRequestBody(@RequestBody TestRequestBodyDTO testRequestBodyDTO){
return "Hello World ID" + testRequestBodyDTO.getId() + "Message : " + testRequestBodyDTO.getMessage();
}
@Data
@Builder
public class ResponseDTO<T> {
private List<T> data;
}
@GetMapping("/testResponseBody")
public ResponseDTO<String> testControllerResponseBody(){
List<String> list = new ArrayList<>();
list.add("Hello World! I'm ResponseDTO");
ResponseDTO<String> response = ResponseDTO.<String>builder().data(list).build();
return response;
}
속성
@Entity
public class Member{
...
@OneToOne
@JoinColumn(name = "locker_id")
private Locker locker;
}
@Entity
public class Locker {
...
@OneToOne(mappedBy = "locker") //Member 엔티티의 locker 필드와 매핑
@ToString.Exclude
private Member member; //이 memeber 필드는 읽기 전용 필드
}
@Entity
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne // Comment 엔티티와 Article 엔티티를 다대일 관계로 설정
@JoinColumn(name = "article_id") // 외래키 생성, Article 엔티티의 기본키(id)와 매핑
private Article article; // 해당 댓글의 부모 게시글
@Column // 해당 필드를 테이블의 속성으로 매핑
private String nickname;
@Column // 해당 필드를 테이블의 속성으로 매핑
private String body;
}
@Entity
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "article")
private List<Comment> comment = new ArrayList<>();
@Column // 해당 필드를 테이블의 속성으로 매핑
private String title;
@Column // 해당 필드를 테이블의 속성으로 매핑
private String content;
}
public interface CommentRepository extends JpaRepository<Comment, Long> {
@Query(value = "SELECT * FROM comment WHERE article_id =: articleId",
nativeQuery = true)
List<Comment> findByArticleId(Long articleId);
}