내일배움캠프 Spring 19일차 TIL

Skadi·2024년 1월 18일
0

1. 스프링 입문

1. DTO

  • DTO(Data Transfer Object)는 데이터 전송 및 이동을 위해 생성되는 객체를 의미합니다.
  • 그리고 DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환한 후 반환할 때도 사용됩니다 ex) RequestDto, ResponseDto

2. CRUD

  • 기본세팅 : entity > Memo
@Getter
@Setter
@NoArgsConstructor
public class Memo {
  private Long id;
  private String username;
  private String contents;
}
  • 메모 생성하기 API를 받을 수 있는 Controller와 메서드 생성
  • Client의 요청 데이터를 받아줄 MemoRequestDto 클래스 생성
  • Create
@PostMapping("/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
  // RequestDto -> Entity
  Memo memo = new Memo(requestDto);
  // Memo Max ID Check
  Long maxId = memoList.size() > 0 ? Collections.max(memoList.keySet()) + 1 : 1;
  memo.setId(maxId);
  // DB 저장
  memoList.put(memo.getId(), memo);
  // Entity -> ResponseDto
  MemoResponseDto memoResponseDto = new MemoResponseDto(memo);
  return memoResponseDto;
}
  • Read
@GetMapping("/memos")
public List<MemoResponseDto> getMemos() {
  // Map To List
  List<MemoResponseDto> responseList = memoList.values().stream()
  .map(MemoResponseDto::new).toList();
  return responseList;
}
  • Update
@PutMapping("/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
  // 해당 메모가 DB에 존재하는지 확인
  if(memoList.containsKey(id)) {
    // 해당 메모 가져오기
    Memo memo = memoList.get(id);
    // memo 수정
    memo.update(requestDto);
    return memo.getId();
   } else {
    throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
   }
}
  • Delete
@DeleteMapping("/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
  // 해당 메모가 DB에 존재하는지 확인
  if(memoList.containsKey(id)) {
  // 해당 메모 삭제하기
  memoList.remove(id);
  return id;
  } else {
  throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
  }
}

1주차 과제

👉 수강생을 관리하는 MANAGER 테이블을 만들어보세요.

  • 컬럼은 총 id, name, student_code 입니다.
  • id는 bigint 타입이며 PK입니다.
  • name은 최소 2자 이상, varchar 타입, not null 입니다.
  • student_code는 STUDENT 테이블을 참조하는 FK이며 not null 입니다.
  • FK는 CONSTRAINT 이름을 ‘manager_fk_student_code’ 로 지정해야합니다.
create table MANAGER(
    id bigint PRIMARY KEY,
     name VARCHAR(255) NOT NULL CHECK (LENGTH(name) >= 2)
    student_code varchar(100) not null,
    CONSTRAINT manager_fk_student_code foreign key (student_code) references student(student_code)
);

👉 ALTER, MODIFY를 이용하여 MANAGER 테이블의 id 컬럼에 AUTO_INCREMENT 기능을 부여하세요.

alter table manager modify column id bigint auto_increment;

👉 INSERT를 이용하여 수강생 s1, s2, s3, s4, s5를 관리하는 managerA와 s6, s7, s8, s9를 관리하는 managerB를 추가하세요.

  • AUTO_INCREMENT 기능을 활용하세요
insert into manager(name, student_code) values ('managerA', 's1');
insert into manager(name, student_code) values ('managerA', 's2');
insert into manager(name, student_code) values ('managerA', 's3');
insert into manager(name, student_code) values ('managerA', 's4');
insert into manager(name, student_code) values ('managerA', 's5');

insert into manager(name, student_code) values ('managerB', 's6');
insert into manager(name, student_code) values ('managerB', 's7');
insert into manager(name, student_code) values ('managerB', 's8');
insert into manager(name, student_code) values ('managerB', 's9');

👉 JOIN을 사용하여 managerA가 관리하는 수강생들의 이름과 시험 주차 별 성적을 가져오세요.

select s.name, e.exam_seq, e.score
from manager m join student s on m.student_code = s.student_code
join exam e on m.student_code = e.student_code where m.name = 'managerA';

👉 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 CASC
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 DELET
DELETE FROM STUDENT WHERE student_code = 's1';

0개의 댓글