데이터 전송 객체
기능1 - 입력 - 로직 - 출력 - 데이터
기능2 - 입력 - 로직 - 출력 - 데이터
Layer Layer Layer Layer
한 코드에 전부 작성하면 일부만 고치고 싶을 경우 어디가 어던 기능을 하는 코드인지 찾기 힘든 경우가 있음
-> 입력처리, 출력처리, 로직, 기능1, 기능2, ... 이렇게 기능별로 나눠서 작성하는 것이 좋음 ➡ 객체지향
나누는 방법이 개인별로 달라지게 됨 -> 정형화 시키기
입력처리, 출력처리 나눠서 이름 붙이기
시작점을 담당하는 애는 어떤 클래스로 만들자~ 하는 식으로 어떤 모양을 갖추도록 약속, 표준화
-> 일종의 디자인 패턴
반드시 지켜야 하는 것은 아님. 프로그램만 잘 돌아가면 잘 만든거겠지만~ 코드 공유가 힘들고 유지보수가 힘듬
적어도 자바 웹 개발을 한다면 MVC를 모르면 안됨
FrameWork : 개발방식, 동작, 실행 방식을 표준화해놓은 것
같은 프레임워크를 사용해서 개발을 하면 모르는 사람들끼리도 코드보고 소통이 가능
웬만하면 계층을 넘나드는 순서가 정해져있음
엔티티 개념을 갖고있음! 사용하기도 작성하기도 편함
해쉬맵 쓰나요 DTO 쓰나요 물어보기
TB Join시 DTO는 어떻게 하지? JoinDTO TB를 하나 더 만들기
두개 조인된 테이브릉ㄴ 해쉬맵으로 쓰던지~ -> DTO와 해쉬맵 섞어쓰기
데이터 저장 객체
안에 있는 데이터가 어떤 데이터인지가 중요한 경우
DTO, VO 결과물이 비슷하게 생겨서 헷갈릴 것
우리는 계층간 데이터 교화닝 중요해서 DTO로마 ㅁ볼 것~
DTO 클래스의 이름을 DB의 테이블 이름으로 작성하는 것이 좋음
DTO 클래스의 멤버 필드 이름과 자료형은 테이블의 컬럼을 따라서 작성하는 것이 좋음
MVC
지금은 Persistent Layer 배우고 있음
데이터베이스의 데이터에 접근하기 위해 작성되는 객체
class EmpDao {
public void selectEmp() {
String sql = "SELECT * FROM emp";
}
public void insertEmp() {
String sql = "INSERT INTO emp ~~";
}
}
.jar 파일 추가 안했다!!!
-- INSERT 할 때 시퀀스값 자동 증가 적용 트리거
CREATE OR REPLACE TRIGGER usertest_ai_trg
BEFORE INSERT ON usertest
FOR EACH ROW
BEGIN
SELECT
usertest_sq.nextval
INTO
:NEW.idx
FROM dual;
END;
/
SET SERVEROUTPUT ON;
-- userTest테이블에 INSERT가 수행될 때마다
-- usertest_ai_trg 트리거 객체가 idx값으로
-- usertest_sq.nextval을 자동으로 채워줄 것이다
-- ** idx컬럼값을 지정하지않을 경우 트리거가 제대로 동작함
INSERT INTO userTest( userid, name ) VALUES ( 'ai_new', 'ai_new' );
SELECT * FROM usertest
ORDER BY idx DESC;