프로그래밍

[Web] day48 : Set 구조 본문

Web/Web

[Web] day48 : Set 구조

시케 2023. 8. 7. 00:53
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
반응형
Comments