
@Getter
@Setter
@NoArgsConstructor
public class Memo {
private Long id;
private String username;
private String contents;
}
@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;
}
@GetMapping("/memos")
public List<MemoResponseDto> getMemos() {
// Map To List
List<MemoResponseDto> responseList = memoList.values().stream()
.map(MemoResponseDto::new).toList();
return responseList;
}
@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("선택한 메모는 존재하지 않습니다.");
}
}
@DeleteMapping("/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
// 해당 메모가 DB에 존재하는지 확인
if(memoList.containsKey(id)) {
// 해당 메모 삭제하기
memoList.remove(id);
return id;
} else {
throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
}
}
👉 수강생을 관리하는 MANAGER 테이블을 만들어보세요.
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를 추가하세요.
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 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';