일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터베이스
- 키-값 데이터베이스
- html
- SQL입문
- DoIt
- 우아한테크
- Doit입문SQL
- 배열 예제
- 생성자
- 자바 예외
- 자바 오류
- dbms
- 함수 선언
- HTML역사
- DoitSQL입문
- 숫자 형식
- 예제
- R1C3
- SQL
- DoitSQL
- 배열 3요소
- 웹브라우저 수용도
- 숫자형식오류
- 함수
- 크롤링 오류
- 크롤링
- 예외
- 자바
- 페이지분석
- 웹 브라우저 전쟁
Archives
- Today
- Total
프로그래밍
[Web] day48 : Set 구조 본문
728x90
반응형
2023.07.17.월
Set 구조
Set 구조는 MODEL 에서 1:N 구조를 구현할때 사용할 수 있는 구조이다
주로 커뮤니티 속성을 가지는 경우에 지주 사용한다
ex)
1 : N = 글 : 댓글
VO DAO 구현
:VO
Set 구조의 VO는 1:N 관계의 VO(1)와 ArrayList<VO>(N)을 멤버변수로 갖는다
package model;
import java.util.ArrayList;
public class BoardSet {
private BoardVO board; // 1
private ArrayList<ReplyVO> rdatas; // N
public BoardVO getBoard() {
return board;
}
public void setBoard(BoardVO board) {
this.board = board;
}
public ArrayList<ReplyVO> getRdatas() {
return rdatas;
}
public void setRdatas(ArrayList<ReplyVO> rdatas) {
this.rdatas = rdatas;
}
}
:DAO
Set 구조의 DAO는 기존의 메서드 시그니처와 같게 진행되지만 ArrayList<VO> 형식의 멤버변수와 VO가 동시에 set되어 리턴하는 구조이다
다음의 코드와 같은 형식말고도 SetDAO가 아닌 DAO의 메서드 시그니처를 호출하여 작성하는 방식 또한 가능하다
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class BoardSetDAO {
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
static final private String SQL_SELECTALL="SELECT * FROM BOARD LIMIT 0,?";
static final private String SQL_SELECTALL_REPLY="SELECT * FROM REPLY WHERE BID=?";
public ArrayList<BoardSet> selectAll(BoardVO bVO, int count){
conn=JDBCUtil.connect();
ArrayList<BoardSet> datas=new ArrayList<BoardSet>();
try {
pstmt=conn.prepareStatement(SQL_SELECTALL);
pstmt.setInt(1, count);
rs=pstmt.executeQuery();
while(rs.next()) {
BoardSet bs=new BoardSet();
BoardVO data=new BoardVO();
data.setBid(rs.getInt("BID"));
data.setBcontent(rs.getString("BCONTENT"));
data.setMid(rs.getString("MID"));
bs.setBoard(data);
//////////
pstmt=conn.prepareStatement(SQL_SELECTALL_REPLY);
pstmt.setInt(1, data.getBid());
ResultSet rs2=pstmt.executeQuery();
ArrayList<ReplyVO> rdatas=new ArrayList<ReplyVO>();
while(rs2.next()) {
ReplyVO rVO=new ReplyVO();
rVO.setBid(rs2.getInt("BID"));
rVO.setDate(rs2.getDate("DATE"));
rVO.setMid(rs2.getString("MID"));
rVO.setRid(rs2.getInt("RID"));
rVO.setRcontent(rs2.getString("RCONTENT"));
rdatas.add(rVO);
}
//////////
bs.setRdatas(rdatas);
datas.add(bs);
}
} catch (SQLException e) {
e.printStackTrace();
}
JDBCUtil.disconnect(rs, pstmt, conn);
return datas;
}
}
Set 구조가 반드시 경제적인 것은 아니며 어떠한 구조를 갖고 있느냐에 따라 선택하여 쓰는 것이 좋다
해당 구조는 코드 가독성이 떨어질 수 있지만 한번에 데이터를 불러오는 경우 로딩이 빠른 등의 특징이 있다
https://github.com/jihyean/Web/tree/main/day48
728x90
반응형
'Web > Web' 카테고리의 다른 글
[Web] day49 : 페이지네이션 (0) | 2023.08.07 |
---|---|
[Web] day47 : JSP 프레임워크 구조 적용하기(FrontController 패턴) (0) | 2023.08.07 |
[Web] day44 : 리스너 (0) | 2023.08.06 |
[Web] day43 : 필터(.java 클래스) (0) | 2023.08.06 |
[Web] day43 : POJO와 NOT POJO (0) | 2023.08.06 |
Comments