Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- emqx
- Spring Security
- 시큐리티
- java
- 남궁성과 끝까지 간다
- 웹개발
- 쇼트유알엘
- docker
- visualvm
- 카프카
- 프로그래머스
- MYSQL
- JWT
- 생성자 주입
- 항해99
- @jsonproperty
- 스파르타코딩클럽
- WEB SOCKET
- AWS
- JavaScript
- Spring
- Kafka
- 패스트캠퍼스
- 스프링의 정석
- DB
- CentOS
- EC2
- 데이터베이스
- 스웨거
- 개인프로젝트
Archives
- Today
- Total
Nellie's Blog
[TIL-231115수] 회사 업무 API 개발, 쿼리 작성 본문
728x90
내가 만든 기획서, UI, ERD, 목데이터 목록, API정의서를 만들어 모두 출력하고 본격적으로 개발을 진행했다.
포스트맨으로 테스트를 하며 진행하고 수시로 회사 깃랩에 내 브랜치도 파서 커밋 푸쉬를 했다.
내가 개발한 소스를 다른 동료가 클론 받아서 작업하는 모습을 보니 신기하면서도 감격스러웠다.
아무것도 몰랐던 내가 지금은 한 회사의 개발자로서 협업을 한다는 것이 참 감개무량하다.
오늘 진행한 개발은 개인 프로젝트와 비슷했으나, ERD 설계를 3정규화까지 진행하다보니 JOIN을 삼중으로 쓰는 경우가 발생했다. 혼자 했을때는 귀찮아서 한 테이블에 때려놓고 JOIN을 거의 하지 않고 불러왔었다.
사수님께 이렇게 많이 조인을 해도 괜찮은 거냐고 여쭤보니 어쩔 수 없다고 하셨다.
그 동안 내가 얼마나 주먹구구식으로 개발을 해왔는지 알 것 같았다.
오늘 작성한 쿼리 문 일부이다. 조인을 여러개 넣는 부분이 생소했다. 익숙해지도록 숙지해야겠다.
<select id="getRoundSchdList" parameterType="kr.co.iabacus.forDoctor.demo.dto.RoundRequestDto" resultType="kr.co.iabacus.forDoctor.demo.dto.RoundScheduleDto">
SELECT d.doctor_name, rs.round_schedule_date, rs.round_start_time, rs.round_end_time, rs.option, rs.alarm_yn
FROM hospital.round_schedule AS rs
JOIN hospital.round_rule_detail AS rrd ON rs.round_rule_detail_idx = rrd.round_rule_detail_idx
JOIN hospital.round_rule AS rr ON rrd.round_rule_idx = rr.round_rule_idx
JOIN hospital.doctor AS d ON rr.doctor_id = d.doctor_id
WHERE rs.round_yn = 'N'
<if test="doctorName != null and doctorName != ''">AND d.doctor_name LIKE '%' || #{doctorName} || '%'</if>
<if test="roundScheduleDate != null">AND rs.round_schedule_date = #{roundScheduleDate}</if>
</select>
INSERT할 때에도 정규화가 되어있기 때문에 그냥 넣을 수가 없었다.
처음에는 이렇게 INSERT해본적이 없기 때문에 난감했지만 GPT샘에게 여쭤본 결과 아래와 같은 서브쿼리를 사용하면 된다고 하여 아래와 같이 작성했다.
이론적으로만 공부했던 서브쿼리를 현업에서는 이렇게 적용이 된다는 것을 느꼈다.
<insert id="saveRoundSchd" parameterType="kr.co.iabacus.forDoctor.demo.dto.RoundScheduleDto">
INSERT INTO hospital.round_schedule
(
doctor_id,
round_alarm_setting,
round_schedule_date,
round_start_time,
round_end_time,
option
) VALUES (
(SELECT doctor_id FROM doctor WHERE doctor_name = #{doctorName}),
#{roundAlarmSetting},
#{roundScheduleDate},
#{roundStartTime},
#{roundEndTime},
1
)
</insert>
쿼리 공부를 정말 열심히 해야겠다.
'회고록' 카테고리의 다른 글
[TIL-231117금] 스프링 빈 라이프 사이클 / 생성자 주입과 필드 주입 차이점 (2) | 2023.11.17 |
---|---|
[TIL-231116목] 회사 업무 11개 API 개발 완료 / 생성자 주입과 필드 주입 (0) | 2023.11.16 |
[TIL-231114화] 회사 업무 개발 시작 (1) | 2023.11.15 |
정보처리기사 필기 결과 발표! 평균 86점으로 합격 (1) | 2023.03.21 |
[TIL-230315수] 김영한 HTTP프로토콜 강의완강 (0) | 2023.03.16 |