카테고리 없음

#12 Spring 입문주차 <2주차>

kmsoon 2024. 5. 16. 16:35

url 보면
GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
? 부터는 requestParam 방식으로 쿼리 스트링 시작이다




@GetMapping("/form/param")
    @ResponseBody
    public String helloGetRequestParam(@RequestParam String name, int age) {
        return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
    }

에서 @RequestParam 생략 가능!

 

@GetMapping("/form/param")
    @ResponseBody
    public String helloGetRequestParam(@RequestParam(required = false) String name, @RequestParam int age) {
        return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
    }



(required = false) : name에 해당하는 값이 들어오지 않아도 에러가 나지 않고 null로 초기화된다

 

 


@ModelAttribute 바디 부분에 들어온 쿼리 스트링 방식의 데이터를 객체에 매핑해서 가져올 수 있다
@ModelAttribute도 생략 가능

 


ResponseBody와 RequestBody!!


https://dev-coco.tistory.com/95


 

[Spring] @RequestBody와 @ResponseBody 개념 알아보기

@RequestBody 와 @ResponseBody 어노테이션 웹 서비스와 REST 방식이 시스템을 구성하는 주요 요소로 자리 잡으면서 XML이나 JSON 등의 형식으로 데이터를 주고 받는 경우가 증가하고 있습니다. 예를 들어 J

dev-coco.tistory.com

 

 

 

 

문제)

STUDENT 테이블에서 s1 수강생을 삭제했을 때 EXAM에 있는 s1수강생의 시험성적과 MANAGER의 managerA가 관리하는 수강생 목록에 자동으로 삭제될 수 있도록 하세요.

- ALTER, DROP, MODIFY, CASCADE 를 사용하여 EXAM, MANAGER 테이블을 수정합니다.

 

답)
ALTER TABLE EXAM DROP CONSTRAINT exam_fk_student_code;
ALTER TABLE EXAM ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
ALTER TABLE MANAGER DROP CONSTRAINT manager_fk_student_code;
ALTER TABLE MANAGER ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;

DELETE FROM STUDENT WHERE student_code = 's1';

 

-->기존의 exam_fk_student_code 라는 이름의 제약조건을 삭제하고

STUDENT 테이블의 데이터가 사라지면 STUDENT 테이블을 참조하고 있는 EXAM 테이블의 데이터 또한 삭제 될 수

있도록 연쇄 삭제가 일어나는 ON DELETE CASCADE 가 포함된 exam_fk_student_code 제약 조건을 다시 생성해준다

3번째 줄부터 같은 내용..

 

 

 

주입하기

 

private final MemoRepository memoRepository;

public void setDi(MemoRepository memoRepository){
  this.memoRepository=memoRepository;
}



--> 에러, final 이 달린 변수는 바로 초기화 하거나 생성자를 통해서 초기화 해야한다

 

 


private MemoRepository memoRepository;
주입이 안될땐 @Autowired를 달아주자
필드 위에 달아주면 private이라해도 bean 객체를 외부에서 주입해 줄 수 있음
근데 추천하지 않음

 


@RequiredArgsConstructor 사용하면 필드는 final을 달아줘야 주입이 됨!!

 

 

 


Spring 'Bean' 사용 방법
스프링 IoC 컨테이너에서 ‘Bean’을 수동으로 가져오는 방법

 

ApplicationContext
@Component
public class MemoService {

private final MemoRepository memoRepository;

    public MemoService(ApplicationContext context) {
        // 1.'Bean' 이름으로 가져오기
        MemoRepository memoRepository = (MemoRepository) context.getBean("memoRepository");

        // 2.'Bean' 클래스 형식으로 가져오기
        // MemoRepository memoRepository = context.getBean(MemoRepository.class);

        this.memoRepository = memoRepository;
    }

...
}