내가 보려고 정리한 스프링/JPA Annotation 목록

지니🧸·2023년 2월 1일
0

본인이 공부하면서 심심할 때마다 업데이트하는 목록임.

🍣 Basic setup

@SpringBootAppliction - 클래스

  • 자동 configuration & 컴포넌트 스캔
  • @Configuration + @ComponentScan + @EnableAutoConfiguration 와 동일

@Configuration - 클래스

  • 이제 수동으로 빈 등록 가능

@ComponentScan - 클래스

  • 개발한 클래스를 빈으로 등록
  • argument 없이는 자동으로 현재 패키지를 스캔함

@EnableAutoConfiguration - 클래스

  • auto configuration 가능케 함

🍣 Request responses

@RequestMapping - 클래스/메서드

  • HTTP 리퀘스트를 REST & MVC 컨트롤러 메서드들과 매핑
@ResponseBody
@RequestMapping("/example")
public String getExample() {
	return "Example";
}

@RequestParam - 파라미터

  • 컨트롤러가 데이터를 파라미터에 할당
  • 쿼리 파라미터를 뽑아서 사용 가능케 함
  • 데이터를 저장하는 이름으로 메서드의 변수를 설정해야 함
  • url 상에서 데이터를 찾음 (form에 데이터 입력 후 제출 > 데이터가 url을 통해 전달됨)
  • form 태그 사용하는 경우에 사용
@GetMapping("/example")
public String getExample(@RequestParam String name) {
	return "example: " + name;
}
  • 필수임 > 값이 존재하지 않으면 에러 뜸
    • 필수가 아닐 경우 > required=false

@RequestBody - 파라미터

  • 컨트롤러가 데이터를 파라미터에 할당
  • 모든 데이터값이 string으로 전달됨
  • 메서드명은 상관없음
  • form 태그 사용 안할 때

@ModelAttribute - 메서드, 파라미터

  • form과 요청 파라미터들을 constructor/setter로 바인딩
  • 사용자가 요청하면 값을 오브젝트 형태로 바꿔줌
  • model.addAttribute()으로 담지 않아도 model에 자동으로 담김

@GetMapping - 메서드

  • @RequestMapping(method = RequestMethod.GET)와 동일
  • 해당 url의 HTTP GET 리퀘스트
@GetMapping("/getExample")
public String getExample() {
	return "example:;
}

@PostMapping - 메서드

  • @RequestMapping(method = RequestMethod.POST)와 동일
  • 해당 url의 HTTP POST 리퀘스트
@PostMapping("/postExample")
public String postExample(@RequestBody Param param) {
	return "example";
}

🍣 Component types

@Component - 클래스

  • 스프링이 자동으로 컴포넌트 클래스를 찾을 수 있게
  • 스프링이 @Component가 있는 클래스를 스캔해서 initialize하고 필요한 의존관계를 주입함

@Controller - 클래스

  • @Component의 버전
  • 본 클래스는 컨트롤러다 라는 표시
  • 핸들러 메서드 모음집

@Service - 클래스

  • @Component의 버전
  • 본 클래스는 서비스다 라는 표시

@Repository - 클래스

  • @Component의 버전
  • 본 클래스는 리포지토리(데이터 저장소)다 라는 표시
  • 기능: 데이터 수정, 삭제, 찾기, 조회

@RestController - 클래스

  • @Controller의 버전
  • @Controller + @ResponseBody 포함

🍣 Testing

@SpringBootTest

  • 스프링 컨테이너와 테스트를 함께 실행
  • integration testing에 용이

🍣 Others

@Bean - 메서드

  • 자바가 해당 메서드 이름의 빈을 생성 & 등록

@Autowired - 메서드 (생성자), 필드 등

  • 필요한 의존 객체의 타입에 해당하는 빈을 찾아 자동 주입
  • 생성자, setter에 주로 사용

@Around

  • 메서드의 실패여부와 관계없이 전후로 실행

🍣 JPA

@Entity
@Table(name = "example")
public class example {
	
    @Id @GeneratedValue
    private Long id;
    
    @Column(name = "example_name")
    private String name;
    
}

@Entity

  • 디비의 테이블과 1:1 매핑
  • 엔티티 인스턴스 하나 = 테이블 레코드 하나

@Table

  • 해당 엔티티가 매핑될 디비의 테이블 설정

@Column

  • name attribute으로 매핑할 칼럼 설정

@Id

  • 엔티티의 pk (primary key) 설정

@GeneratedValue

  • 자동생성 값 설정

@OrderBy

  • 데이터 sorting
@OrderBy("name asc")
private List<String> names;

@Embeddable

  • 해당 클래스는 다른 엔티티들에 의해 임베드될 수 있음

@Embedded

  • 다른 엔티티를 클래스에 임베드할 때 사용

@Transactional - 클래스, 메서드

  • 테스트 시작 전에 트랜잭션 시작 & 테스트 완료 후 항상 롤백
  • 디비에 데이터를 남기지 않음 -> 다음 테스트에 영향 X
  • 테스트가 아닌 클래스에 필요한 이유? JPA의 경우
    • 데이터 저장/변경 시에 항상 필요하기 때문
  • 디폴트: 롤백

@Rollback(boolean)

  • @Rollback(true)가 디폴트이며, 실제 디비 저장이 안됨
  • 디비 반영 원하면 > @Rollback(false)

@Commit

  • DB에 반영

🍣 Hibernate

@ManyToOne

@ManyToMany

@JoinColumn

@JoinTable

@Inheritance


참고:
https://lightrun.com/spring-boot-annotations/
https://www.digitalocean.com/community/tutorials/jpa-hibernate-annotations

profile
우당탕탕

0개의 댓글