728x90
728x90
JDBC DTO의 개념
데이터베이스의 내용을 조회하고 조회된 내용을 반환받기 위해서는 여러개의 컬럼 값을 전달 받아야한다.
각각의 컬럼을 반환받는 메소드를 만들게 되면 컬럼 수 만큼의 메소드를 추가해야한다.
하지만 함수의 리턴 값은 하나이고 데이터들을 전달 받기 위한 방법이 필요하다.
결과 데이터를 하나로 묶어 반환할 수 있는 방법은 크게 2가지가 있다.
첫 번째로는 HashMap을 사용하는 방법이고 두 번째로는 DTO(Data Transfer Object)를 사용하는 방법이다.
두 방법 모두 key-value 방식으로 동작하며 데이터의 이동을 목적으로 사용할 수 있다.
HashMap을 사용하면 별도의 DTO class를 만들 필요없이 데이터를 가져올 수 있다.
하지만 DTO를 사용하는 것이 더 바람직하다.
컬럼명이 변경되었다고 가정하면 필드와 필드에 맞게 setter, getter메소드도 수정해야한다.
그러면 사용하는 쪽에서도 setter, getter 메소드를 찾을 수 없기 때문에 컴파일 오류가 발생한다.
오류가 발생하기 때문에 어느 위치에 수정을 해야할지 빠르게 파악할 수 있다.
하지만 HashMap을 사용하면 컴파일 과정에서는 오류가 발생하지 않고 런타임 과정에서 오류가 발생하여 오류를 추적하기가 어려워진다.
public class MenuDTO {
private String menuCode;
private String name;
private int price;
private String orderableStatus;
private String categoryCode;
public MenuDTO() {
}
public MenuDTO(String menuCode, String name, int price, String orderableStatus, String categoryCode) {
super();
this.menuCode = menuCode;
this.name = name;
this.price = price;
this.orderableStatus = orderableStatus;
this.categoryCode = categoryCode;
}
public String getMenuCode() {
return menuCode;
}
public void setMenuCode(String menuCode) {
this.menuCode = menuCode;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getOrderableStatus() {
return orderableStatus;
}
public void setOrderableStatus(String orderableStatus) {
this.orderableStatus = orderableStatus;
}
public String getCategoryCode() {
return categoryCode;
}
public void setCategoryCode(String categoryCode) {
this.categoryCode = categoryCode;
}
@Override
public String toString() {
return "MenuDTO [menuCode=" + menuCode + ", name=" + name + ", price=" + price + ", orderableStatus="
+ orderableStatus + ", categoryCode=" + categoryCode + "]";
}
}
DTO 클래스의 조건
- 모든 필드는 private로 작성한다.
- 기본 생성자는 명시적으로 작성하고 모든 필드를 초기화하는 생성자는 관례상 작성한다. (프레임워크에서 기본생성자를 필요로 하는 경우가 있다.)
- 모든 필드에 대한 setter, getter 메소드를 작성한다.
- toString 메소드를 작성한다. (optional)
- 직렬화 처리 (optional)
public class Application {
public static void main(String[] args) {
Connection connection = getConnection();
Statement statement = null;
ResultSet resultSet = null;
MenuDTO menuDTO = null;
Scanner sc = new Scanner(System.in);
String menuCode = sc.nextLine();
String query = "SELECT * FROM TBL_MENU WHERE MENU_CODE='" + menuCode + "'";
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(query);
if (resultSet.next()) {
menuDTO = new MenuDTO();
menuDTO.setMenuCode(resultSet.getString("MENU_CODE"));
menuDTO.setName(resultSet.getString("NAME"));
menuDTO.setPrice(resultSet.getInt("PRICE"));
menuDTO.setOrderableStatus(resultSet.getString("ORDERABLE_STATUS"));
menuDTO.setCategoryCode(resultSet.getString("CATEGORY_CODE"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(resultSet);
close(statement);
close(connection);
}
System.out.println(menuDTO);
}
}
DTO에 오버라이딩 되어있는 toString 메소드를 통해서 데이터베이스로 부터 조회한 행을 확인할 수 있다.
728x90
반응형
'Backend > JDBC' 카테고리의 다른 글
PreparedStatement 생성 (0) | 2023.06.13 |
---|---|
JDBC statement와 resultSet 생성 (0) | 2023.06.11 |
JDBC Template 구현 (0) | 2023.06.10 |
JDBC 데이터베이스 접속 정보 분리 (0) | 2023.06.09 |
JDBC Connection 생성 (0) | 2023.06.08 |
댓글