본문 바로가기
Team Project (국비)/Team Project

중간프로젝트 Model 파트

by Hwanii_ 2023. 7. 30.
728x90

 

 

 

1. BoardVO

 

 

7개의 멤버 변수 + 3개의 임시 변수

 

1-2. BoardDAO

 

public class BoardDAO {

static final String SQL_INSERT

= "INSERT INTO BOARD (MID,MNAME,PNUM,BCONTENT,BSTAR) VALUES (?,?,?,?,?)";

 

static final String SQL_SELECTALL_PRODUCT

= "SELECT ROW_NUMBER() OVER (ORDER BY BNUM) AS RNUM, B.BNUM, B.MID, B.PNUM, B.BCONTENT, B.BSTAR, B.BDATE, B.MNAME, P.PNAME"

+ " FROM BOARD B INNER JOIN PRODUCT P ON B.PNUM = P.PNUM"

+ " WHERE P.PNUM = ?";

// 보드 (리뷰) 테이블에 있는 모든 리뷰중에서, 해당 상품 (P.PNUM) 에 작성 되어 있는 리뷰를 SELECT 하기.

(상품 이름이 필요해서 상품 테이블과 조인.)

 

static final String SQL_SELECTALL_MYPAGE

= "SELECT ROW_NUMBER() OVER (ORDER BY BNUM) AS RNUM, B.BNUM, B.MID, B.PNUM, B.BCONTENT, B.BSTAR, B.BDATE, B.MNAME, P.PNAME"

+ " FROM BOARD B INNER JOIN PRODUCT P ON B.PNUM = P.PNUM"

+ " WHERE MID = ?";

// 보드 (리뷰) 테이블에서 있는 모든 리뷰중에서, 내가 작성한 리뷰를 SELECT 하기.

(상품 이름이 필요해서 상품 테이블과 조인.)

static final String SQL_SELECTONE = "SELECT * FROM BOARD WHERE BNUM = ?";

 

static final String SQL_UPDATE = "UPDATE BOARD SET BCONTENT = ?, BSTAR = ? WHERE BNUM = ?";

 

static final String SQL_DELETE = "DELETE FROM BOARD WHERE BNUM = ?";

각 CRUD 메서드에서 사용 되는, 6개의 SQL 쿼리문

 

SQL_INSERT

>> 회원이 상품에 리뷰를 작성할 때 사용 된다.

SQL_SELECTALL_PRODUCT

>> 모든 리뷰중에서, 특정 상품에 작성 되어 있는 리뷰를 보기 위해 사용 된다.

SQL_SELECTALL_MYPAGE

>> 모든 리뷰중에서, 회원이 작성한 리뷰를 마이페이지 에서 보기 위해 사용 된다.

SQL_SELECTONE

>> 모든 리뷰중에서, 특정 리뷰의 정보를 보기 위해 사용 된다.

SQL_UPDATE

>> 특정 리뷰를 수정 할 때 사용 된다.

SQL_DELETE

>> 특정 리뷰를 삭제 할 때 사용 된다.

 

Model 하고, MySQL DBMS 와의 연결을 위해, JDBC 인터페이스를 사용 했다.

 

JDBC 인터페이스를 구현하는데, 공통적으로 필요한 메서드들을 모아 모듈화 했다.

 

2. MemberVO

 

 

7개의 멤버 변수 + 4개의 임시 변수

 

2-2. MemberDAO

 

public class MemberDAO {

 

static final String SQL_INSERT

= "INSERT INTO MEMBER (MID,MPW,MNAME,MPHONE,SIGNUPKIND) VALUES (?,?,?,?,?)";

 

static final String SQL_SELECTALL

= "SELECT MID,MPW,MNAME,SUBSCRIPTION,ISADMIN,MPHONE,SIGNUPKIND FROM MEMBER";

 

static final String SQL_SELECTONE_SIGNIN

= "SELECT MID,MPW,MNAME,SUBSCRIPTION,ISADMIN,MPHONE,SIGNUPKIND

FROM MEMBER WHERE MID = ? AND MPW = ?";

 

static final String SQL_SELECTONE_INFO

= "SELECT MID,MPW,MNAME,SUBSCRIPTION,ISADMIN,MPHONE,SIGNUPKIND

FROM MEMBER WHERE MID = ?";

 

static final String SQL_SELECTONE_SIGNUP

= "SELECT MID,MPW,MNAME,SUBSCRIPTION,ISADMIN,MPHONE,SIGNUPKIND

FROM MEMBER WHERE MID = ? OR MPHONE = ?";

 

static final String SQL_SELECTONE_FINDID

= "SELECT MID,MPW,MNAME,SUBSCRIPTION,ISADMIN,MPHONE,SIGNUPKIND

FROM MEMBER WHERE MPHONE = ?";

 

static final String SQL_UPDATE_CHANGE

= "UPDATE MEMBER SET MPW = ?, MNAME = ?, MPHONE = ? WHERE MID = ?";

 

static final String SQL_UPDATE_CHANGESUBS

= "UPDATE MEMBER SET SUBSCRIPTION = 1 WHERE MID = ?";

 

static final String SQL_DELETE = "DELETE FROM MEMBER WHERE MID = ?";

각 CRUD 메서드에서 사용 되는, 9개의 SQL 쿼리문

 

SQL_INSERT

>> 회원 가입시 사용 된다.

 

SQL_SELECTALL

>> 회원 목록을 모두 보기 위해 사용 된다.

 

SQL_SELECTONE_SIGNIN

>> 로그인시 사용 된다.

 

SQL_SELECTONE_INFO

>> 회원 정보를 불러 올 때 사용 된다.

 

SQL_SELECTONE_SIGNUP

>> 회원 가입시 사용 된다.

 

SQL_SELECTONE_FINDID

>> 이메일 찾기시 사용 된다.

 

SQL_UPDATE_CHANGE 

>> 회원 정보 변경시 사용 된다.

 

SQL_UPDATE_CHANGESUBS 

>> 회원의 구독 여부 정보를 변경 할 때 사용 된다.

 

SQL_DELETE 

>> 회원 탈퇴시 사용 된다.

 

3. OrderVO

 

 

6개의 멤버 변수 + 2개의 임시 변수

 

3-2. OrderDAO

 

public class OrderDAO {

 

static final String SQL_INSERT

= "INSERT INTO ORDER_ (MID,OPRICE,OSTATE,OADDRESS) VALUES (?,?,?,?)";

 

static final String SQL_SELECTALL_MYORDER

= "SELECT ROW_NUMBER() OVER (ORDER BY ONUM) AS RNUM, ONUM,MID,ODATE,OPRICE,OSTATE,OADDRESS FROM ORDER_ WHERE MID = ?";

// 내 주문 목록 보기.

 

static final String SQL_SELECTALL_ADMIN

= "SELECT MID,ODATE,OPRICE,OSTATE,OADDRESS FROM ORDER_";

 

static final String SQL_SELECTONE

= "SELECT MID,ODATE,OPRICE,OSTATE,OADDRESS

FROM ORDER_

WHERE ONUM = (SELECT MAX(ONUM) FROM ORDER_)";

 

// ORDER 테이블에서 제일 최신 (마지막) 에 저장된 주문 내역을 가져오기.

// (ORDER 테이블에서 ONUM 칼럼에 행 번호가 제일 큰 수를 ORDER 테이블로 부터 SELECT 하는 구문.)

 

static final String SQL_UPDATE = "UPDATE ORDER_ SET OSTATE = '결제완료' WHERE ONUM = ?";

 

static final String SQL_DELETE = "";

 

// 사용자가 주문 취소를 하면, 주문 정보 자체가 DELETE 되는 설계가 아니다.

// 주문 취소를 하면, "주문 취소된 주문 입니다." 라고 보이게 할 예정 이다.

각 CRUD 메서드에서 사용 되는, 5개의 SQL 쿼리문

 

SQL_INSERT 

>> 회원이 주문에 성공 하면 DB에 주문 정보를 저장 하기 위해 사용 된다.

 

SQL_SELECTALL_MYORDER

>> 회원의 모든 주문 목록을 보기 위해 사용 된다.

 

SQL_SELECTALL_ADMIN 

>> 모든 주문 목록을 보기 위해 사용 된다.

 

SQL_SELECTONE

>> Order 테이블에서 가장 최신으로 저장된 주문 내역을 가져 오기 위해 사용 된다.

(가장 최신의 PK인 oNum을 뽑아서, OrderDetail 테이블에 정보를 넣어 주기 위함.)

 

SQL_UPDATE 

>> 주문에 성공 했을 때, 주문 상태를 바꿔 주기 위해 사용 된다.

(최종 프로젝트 때는,

주문 완료, 결제 완료, 배송 대기, 배송 중, 배송 완료

등의 상태를 추가 할 예정.)

 

4. OrderdetailVO

 

 

5개의 멤버 변수 + 5개의 임시 변수

 

4-2. OrderdetailDAO

 

public class OrderdetailDAO {

 

static final String SQL_INSERT = "INSERT INTO ORDERDETAIL (PNUM,ONUM,ODCNT) VALUES (?,?,?)";

 

static final String SQL_SELECTALL_ORDERDETAIL = "";

// 특정한 주문건의 대한 주문 상세 보기.

// 최종 프로젝트 때 추가 하기 !

 

static final String SQL_SELECTALL_REVIEW

= "SELECT ROW_NUMBER() OVER (ORDER BY OD.ONUM) AS RNUM,

O.MID, OD.ONUM, P.PNAME, P.PPRICE, OD.PNUM, OD.ODCNT, OD.ISWRITE, OD.ODNUM"

+ " FROM ORDERDETAIL OD

JOIN PRODUCT P ON OD.PNUM = P.PNUM

JOIN ORDER_ O ON O.ONUM = OD.ONUM"

+ " WHERE O.MID = ? AND OD.ISWRITE = '작성 전'";

 

// 마이페이지 에서 내가 작성 가능한 리뷰 보여주기.

 

static final String SQL_SELECTONE = "";

 

static final String SQL_UPDATE = "UPDATE ORDERDETAIL SET ISWRITE = '작성 완료' WHERE ODNUM = ?";

 

static final String SQL_DELETE = "";

각 CRUD 메서드에서 사용 되는, 3개의 SQL 쿼리문

 

SQL_INSERT 

>> 주문 상세 테이블에 정보를 저장 할 때 사용 된다.

 

SQL_SELECTALL_REVIEW

>> 마이페이지 에서 회원이 작성 가능한 리뷰를 보여 주기 위해 사용 된다.

(주문 상세 테이블 + 상품 테이블 + 주문 테이블 3개를 조인한 쿼리문.)

 

SQL_UPDATE 

>> 특정 회원이 리뷰를 작성 했으면, 작성 상태를 변경 해주기 위해 사용 된다.

 

5. OrderSet

 

 

주문 정보 1건에 대한, 주문 상세 다수를 나타내기 위한 기능 클래스 이다.

 

(예를들어, 콜라, 사이다, 햄버거, 감자튀김을 한번에 구매 하면,

주문 테이블의 PK인 oNum은 모두 동일하지만,

각각의 주문 상세 테이블의 PK인 odNum은 모두 다르다)

 

주문 테이블과 주문 상세 테이블의 조합이라 생각 할 수도 있고,

 

OrderVO 자료형과, OrderdetailVO 자료형에 해당하는

각 멤버들을 OrderSet 클래스에 포함관계로 선언한 모습을 확인 할 수 있다.

 

OrderSet 객체를 생성하면,

OrderVO와 OrderdetailVO 객체들도 같이 생성 된다.

 

그러면, OrderSet 객체의 메서드들로,

OrderVO와 OrderdetailVO 객체들을 사용할 수 있게 된다.

 

OrderSet 객체가 OrderVO와 OrderdetailVO 객체들을,

참조 할 수 있기 때문에,

이러한 관계로 인해서,

OrderSet 객체는 OrderVO와 OrderdetailVO 객체들과 높은 연관성을 가지게 된다.

 

따라서, OrderSetDAO 클래스 에서 특정한 비즈니스 메서드 로직을 처리 할 때,

OrderVO와 OrderdetailVO 클래스를 둘 다 사용 하는 작업을 수행 할 수 있게 된다.

 

5-2. OrderSetDAO

 

2개의 쿼리문이 있고,

 

 

한개의 비즈니스 메서드가 존재 하는 클래스 이다.

 

특정 회원이 주문한 주문건에 대한 데이터를, OrderSet 타입의 참조변수 os가 set 하고,

 

그 주문에 같이 달려 있는, 모든 주문 상세 건을 while문을 통해,

oddatas 라는 배열리스트에 데이터를 add 한다.

 

그리고 나서, OrderSet 타입의 참조변수 os가 배열리스트를 set 한다.

 

그러면,

현재 참조변수 os는,

1개의 주문건 데이터 + 다수의 주문 상세 데이터

set 하고 있는 상황인데, 

 

이 둘을 OrderSet 자료형의 배열리스트에 add 해서 데이터를 저장 한다.

 

이 작업을, 큰 while문을 통해서, 반복하는 구조를 가지는 로직 이다.

 

 

 

 

반응형