만족

[JSP] DAO, DTO 패턴 본문

[JSP] DAO, DTO 패턴

Backend/JSP Satisfaction 2018. 1. 5. 20:36

DAO와 DTO는 Database와 통신 시에 사용하는 Design Pattern중 하나이다.

 

DAO는 Data Access Object로 데이터베이스에 접근 할 때 사용하는 객체이고

 

DTO는 Data Transfer Object로 Database에 Access하여 가져온 데이터들을 규격화한 객체이다.

 

DAO/DTO 패턴을 사용하면 반복되는 코드가 줄어들고, 규격화된 데이터들로 인해 효율성이 증가한다.

 

예를 들어 member라는 table을 대상으로 DAO/DTO 패턴을 적용하면

public class MemberDAO {

  public MemberDAO() {

    try {

      Class.forName("oracle.jdbc.driver.OracleDriver");

    } catch (Exception e) {

      System.out.println(e.getMessage());

    }

  }

  public ArrayList < MemberDTO > getAllData() {

    ArrayList < MemberDTO > list = new ArrayList();

    Connection connect = null;

    Statement state = null;

    ResultSet result = null;

    try {

      connect = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "USERNAME", "PASSWORD");

      state = connect.createStatement();

      result = state.executeQuery("select * from member");

      while (result.next()) {

        String ex = result.getString("ex");

        list.add(new MemberDTO(ex));

      }

    } catch (Exception e) {

      System.out.println(e.getMessage());

    } finally {

      try {

        if (connect != null) connect.close();

        if (state != null) state.close();

        if (result != null) result.close();

      } catch (Exception e) {

        System.out.println(e.getMessage());

      }

    }

    return list;

  }

}

 

 
public class MemberDTO {
  private String ex = null;

  public MemberDTO(String ex) {
    this.setEx(ex);
  }

  public String getEx() {
    return ex;
  }

}
 
 
처럼 사용한다.
 
외부에서 getAllData() 메소드를 호출하면 DTO에 member table에 있는 데이터를 하나하나 담아서 ArrayList로 return 하게 된다.
 
값을 꺼낼 때에는 ArrayList의 list(indexNumber) 메소드를 이용하여 DTO객체를 하나씩 사용할 수 있게 된다.
 
DTO클래스에는 setter가 없는데, 데이터베이스에서 꺼낸 값을 임의로 변경할  필요가 없기 때문에 setter는 필요 없는 것이다.
(대신 생성자에서 값을 할당한다)
 
 
 
 
 
 

 

'Backend > JSP' 카테고리의 다른 글

[JSP] 세션(Session)  (0) 2018.01.05
[JSP] 커넥션 풀(Connection Pool)  (0) 2018.01.05
[JSP] 서블릿 파라미터(Servlet Parameter)  (0) 2018.01.05
[JSP] 빈(Bean)  (0) 2018.01.05
[JSP] PreparedStatement  (0) 2018.01.03


Comments