2개 문장 실행하는 경우가 있다.
INSERT, UPDATE, DELETE 할 때 업무적으로 이름 잘 지은 분
or 쿼리를 2개 이상 실행하는 함수가 있는 분
-> 예시 보는 중
오라클 가서 보드 종속삭제하면 이렇게 하나하나 다 안지워줘도 다 지워진다고 함~
boardService가 있음에도 불구하고 Contoller에 상세하게 있는건 아니라고 함
-> boardService로 가지고 가기
서비스가 있으면 컨트롤러만 쓰는거고 / 그 컨트롤러는 여러 DAO들이 쓰는거고
지우는건 DAO가 책임진다고
아까 그 종속 삭제 안하면 DELETE 쿼리 4개를 써야 -> 오라클에서 종속 삭제 하자~~
- 근데 회계 장부같은건 조심히 다루기 ~ (이런건 한 번에 다 삭제하면 안되니)
CASCADE?
DAO는 테이블과 1:1
그래서 테이블 수정, 삭제는 다 DAO를 통해서 한다고 함
DAO가 없어서 우리는 지금 SQL문을 직접 사용한다고...
Transaction을 알아보자
수정을 한다고 했을 때
L 에 함수 새로
당연히 R에는 implements 하고 새로운 함수 만들어야겠지
R
뭘 클릭해서 자세한 페이지로 가면,
들어가는 순간 조회수 +1 될 것
- hitUp() 함수가 필요할 것
- 좋아요 함수도 있을 것
- 공유(share) 함수도 있을 것
// 그간 그냥 페이지에서 큼직한 것만 뽑았는데... 사실 이런 것들도 있는 것
서비스한테 조회수 들어왔으니 up해줘, like 들어왔으니 up 해줘 등을 시켜야하는 것
Dao는 테이블과 연관
- db와 연결되어 있어서 가지고 있는 메소드가 이렇게 업무적이지 않음
- hitUp을 하기 위해서도 update, likeUp을 할 때도 update
cf) 바람직하지 않은 방식
ㅡㅡㅡㅡㅡ
* 파일 NoticeService *
hipUp을 구현해보자
- update를 가질 수도 있지만 ~ hitUp이라고 전문화되게 써주는게 맞다 ~~
문제는 hitUp()에 맞게 쿼리를 작성해야하는데
up을 하려면 기존의 것을 알고 있어야 함
cf) L에서 16번째줄
- update를 한 번에 하는게 있다.
- 이걸 이용해서 할 수도 있는데... Dao랑 헷갈...
- 무튼 쓰려거든
말은 '계좌이체'지만
사실상은 update가 2개인 것 (아마 보내는쪽, 받는쪽? 이게 맞음)
-> 하나의 명령어처럼 실행될 수 있어야
2개 이상이 하나인것처럼 처리하는 것 = 트랜잭션
둘 다 실행되거나 둘 다 실행 안 되거나
commit;
rollback;
오라클에서는 rollback으로 해서 두 개 처리를 해주고 안해주고를 하는데... (commit 하기 전까지는 commit이 아니기에 이런 말이 나온듯)
jdbc에서는 어떻게 할까~!
//
hitUp 함수를 보자
https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html
https://mkyong.com/jdbc/jdbc-transaction-example/
https://ubermensch-with.tistory.com/364
(예외 처리 할 게 있어서, 아래부분에서 transition 배우다가 예외 처리를 더 배웠음)
요지는 transaction 처리 시,
com.setAutoCommit... 하면 자동 commit 안된다는거 (문장들 많이 쓴게 다 올바르면 실행되도록~)
-> com.commit(); 무조건 해줘야 한다는 점
+ 자원관리 할 때 try() 안에 넣어주면 close 해줄 필요가 없다는 점~!
3가지 옵션을 더 봐야함
고립도에 따라서 성능에 영향을 준다고 한다.
// 이건 다음주 월요일에!
cf) '자원 사용'이란
자원
- 운영 체제 자원
- db 자원
요지는 close들을 잘 해줘야 한다! 예외처리 기법에 try() 안에 넣어주면 저절로 close를 해준다는게 포함됐다는 것!
* 오늘 정리 *
예외처리
- 예외란 무엇인가
- 예외를 던지거나 처리하는 방법
- checked 예외 -> 무조건 try-catch를 하든, 던지든
- unchecked 예외 -> 신경 안 쓰는거
transaction
- 기본적으로 자동 commit이라
connection 객체에서 con.setAutoCommit(false) 처리를 해야함 (오토 커밋이 아니라 매뉴얼 커밋으로)
-> con.commit(); 해서 반드시 해줘야 한다.
- close 하는 기능들 신경써야 한다.
(그래서 새로운 예외 처리 코드를 보게 된 것. 잠시 본 것. 자원 관리에 대해)
65일 - 트랜잭션 처리 4가지 조건 (ACID) (0) | 2021.05.24 |
---|---|
64일 - 시퀀스 (Sequence) (0) | 2021.05.21 |
61일차. DB 14 - 모델링 (2정규화, 4정규화, 제약조건 - 도메인(NOT NULL, DEFAULT, CHECK), 엔티티(PRIMARY KEY, UNIQUE)) (0) | 2021.05.17 |
60일차. DB 13 - 모델링 (논리설계 실습) (1) | 2021.05.14 |
59일차. DB 12 - 모델링 (개념설계 실습) (0) | 2021.05.13 |