게시판 만들기 5

msriver·2020년 6월 1일
1

JSP&Servlet

목록 보기
6/13

🆗 현재까지 한것

  • DB에 게시글 데이터를 담아 사용하기 위해 board 테이블을 생성 및 샘플데이타 추가
  • DBCP 추가
  • DTO 만들기(=VO클래스=자바빈클래스)

💡 진행방향

  • DAO클래스를 만들려고 한다. DAO클래스는 Data Access Object의 약자로 데이터베이스와 연결하여 하는 모든 작업들을 정의하는 클래스이다. BoardDAO 클래스 생성.
  • 데이터베이스에 접근하기 위해 커넥션을 얻어오고 이를 다시 반납하는 클래스를 따로 만들려고 한다. 이는 만일 DAO클래스가 여러개 생긴다고 가정하면 코드를 중복하여 기술하지 않아도 된다는 장점이 있다. 물론 지금 하려는 수준에서는 배보다 배꼽이 더 클수 있다. 이 클래스는 DBManager으로 이름을 짓는다.
  • 그리고 jstl 사용을 위해 jstl 라이브러리를 다운받아서 추가해주었다. 추가하는 방법은 jdbc드라이버를 추가하는 방법과 같다.

DBManager 클래스 만들기

package util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBManager {
	//커넥션객체를 얻어오는 메서드
	public static Connection getConnection() {
		Connection conn = null;
		
		try {
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/TestDB");
			conn = datasource.getConnection();
		} catch(Exception e) {
			e.printStackTrace();
		}
		
		return conn;
	}
	
	//작업 수행 후 리소스 해제 - select
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			rs.close();
			stmt.close();
			conn.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	//작업 수행 후 리소스 해제 - update, insert, delete
	public static void close(Connection conn, Statement stmt) {
		try {
			stmt.close();
			conn.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

DAO클래스 만들기

dao클래스는 싱글톤패턴으로 만든다. 싱글톤패턴은 인스턴스가 오로지 단 하나만 존재할 수 있도록 클래스를 설계하는 것을 말한다. 디자인패턴의 일종이다.
DAO클래스가 하는 일은 데이터베이스의 데이터를 VO객체에 가져오거나 VO객체의 저장된 값을 데이터베이스에 추가하는 등, CRUD작업을 위한 메서드들이 정의된 클래스이다.
이런 작업들을 하기위해 매번 DAO객체를 생성할 필요없이 메모리에 하나의 객체를 올려놓고 이를 사용하는 것이 시스템의 성능면에서 효율적이다.
DAO클래스는 보통 데이터베이스의 테이블 하나당 하나씩 설계를 한다.
(그런데 만약 join을 해야할 경우엔 어떻게 해야할까??)
싱글톤패턴으로 작성하기 위한 조건

  • 생성자를 private으로 만든다.
    이러면 외부에서 인스턴스를 생성할 수 없고 자기자신만 생성가능하다.
  • 생성된 인스턴스도 외부접근이 불가능하게 private 필드로 선언한다.
  • setter는 정의하지 않고 getter만 정의하여 외부에서 수정은 할 수 없고 값만 얻을수 있게 한다.
package com.msriver.dao;

public class BoardDAO {
	//생성자 private
	private BoardDAO() {}; 
	
	//instance도 private;
	private static BoardDAO instance = new BoardDAO(); 
	
	//setter는 정의 x, getter만 만듬
	public static BoardDAO getInstance() {
		return instance;
	}
	
}
profile
NOBODY

0개의 댓글