웹 개발 기초/자바 웹을 다루는 기술

DAO와 VO 사용법

sungw00 2023. 2. 15. 17:16
728x90

DAO(Data Access Object)의 정의

  • 자바 프로그램에서 데이터베이스 작업만 수행하는 클래스
  • 자바 프로그램의 다른 기능을 하는 클래스와 구분하여 작업함

DAO의 등장 배경

  • 하나의 클래스 안에 코드가 많아져서 개발이나 유지 관리가 힘들어짐
  • 화면 기능, 데이터베이스 연동 기능 등을 각각 담당하는 클래스로 나누어 프로그램을 구현함
  • 유지관리가 편리하고, 재사용성이 높아짐

VO(Value Object)의 정의

  • 여러 다른 타입의 데이터를 다른 클래스로 전달할 때 사용됨
  • TO(Transfer Object)라고도 함

VO 만드는 방법

  • 테이블의 필드명을 속성으로 선언함
  • 생성자를 구현함
  • 각 속성에 대한 getter/setter 메서드를 구현함
public class MemeberVO {
    // 속성
    private String id;
    private String name;
    private int height;
    private int weight;
    private int age;
    
    // 생성자
    public MemberVO( ) {
    }
    
    // getter와 setters
    ...

 

DAO와 VO를 이용한 회원 정보 조회 시퀀스 다이어그램

  1. MemberTest가 화면 기능을 하며, MemberDAO 객체를 만들어 list( )메서드 호출
  2. MemberDAO에서 executeQuery( ) 메서드 호출하여 DB에서 회원정보를 조회하여 레코드셋으로 리턴받음
  3. 레코드셋의 레코드 수만큼 VO 객체로 만들어 속성에 레코드셋 세팅
  4. ArrayList에 저장해서 MemberTest로 넘겨주면 getter를 사용해서 콘솔로 값을 출력

DAO와 VO를 이용한 데이터베이스 연동 예제

// MemberVO.java
public class MemberVO {
    private String id;
    private String name;
    private int height;
    private int weight;
    private int age;
}

// 생성자
public MemberVO( ) {
}

public MemberVO(String name, int age) {
    this.name = name;
    this.age = age;
}

public MemberVO(String id, String name, int height, int weight, int age) {
    this.id = id;
    this.name = name;
    this.height = height;
    this.weight = weight;
    this.age = age;
}

getter/setter
...
// MemberDAO.java
import java.util.*;

public class MemberDAO {
    private static final String driver = "oracle.jdbc.driver.OracleDriver";
    private static final String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
    private static final String user = "scott";
    private static final String pwd = "tiger";
    private Connection con;
    private Statement stmt;
    private ResultSet rs;
    public ArrayList<MemberVO> list() {
        ArrayList<MemberVO> list = new ArrayList<MemberVO>();
        try {
            connDB();
            String query = "select * from Member";
            System.out.println(query);
            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()) {
                String id = rs.getString("id");
                String name = rs.getString("name");
                int height = rs.getInt("height");
                int weight = rs.getInt("weight");
                int age = rs.getInt("age");
                MemberVO data = new MemberVO();
                data.setId(id);
                data.setName(name);
                data.setName(name);
                data.setHeight(height);
                data.setWeight(weight);
                data.setAge(age);
                list.add(data);
            } // end while
            stmt.close();
            con.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
        return list;
    } // end list()

    public void connDB() {
        try {
            Class.forName(driver);
            System.out.println("Oracle 드라이버 로딩 성공");
            con = DriverManager.getConnection(url, user, pwd);
            System.out.println("Connection 생성 성공");
            stmt = con.createStatement();
            System.out.println("Statement 생성 성공");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }   
}
// MemberTest.java
import java.util.ArrayList;

public class MemberTest {
    public static void main(String[] args) {
        String name = null;
        MemberDAO dao = new MemberDAO();
        ArrayList<MemberVO> list = dao.list();
        for (int i=0; i<list.size(); i++) {
            MemberVO data = (MemberVO) list.get(i);
            String id = data.getId();
            String name = data.getName();
            int height = data.getHeight();
            int weight = data.getWeight();
            int age = data.getAge();

            System.out.println("아이디는>>" + id + " 이름은" + name + " 키는" + height + " 몸무게는" + weight + " 나이는" + age);
        }
    }
}

 

728x90