일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DATABASE
- oracle developer
- DTO
- 오라클
- Oracle
- 접근제한자
- Oracle SQL Developer
- JSP
- java접근제어자
- C#접근제어자
- JavaSwing
- DB 제약조건
- 빅오표기법
- 자바연산자
- Vo
- C언어 표준 라이브러리
- sql
- DAO
- java
- DB
- C#접근제한자
- 데이터베이스
- oracle db
- 자바
- DEFAULT
- o(log n)
- mvc디자인패턴
- 메이븐업데이트
- O(n)
- break
Archives
성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و
DTO/VO/DAO란 ? 본문
- DTO(Data Transfer Object)와 DAO(Data Access Object)의 공통점:
- 데이터 중심 - DTO는 데이터를 전송하는 데 사용되고, DAO는 데이터를 접근하고 조작하는 데 사용
- 비즈니스 로직 없음
- 명확한 책임 분리 - DTO와 DAO는 각각의 역할이 명확하게 분리되어 있다. DTO는 데이터 전송을, DAO는 데이터베이스 접근을 담당한다.
- VO (Value Object) : 값 객체로, 변하지 않는 데이터를 나타내는 데 사용된다.
- 변하지 않는 데이터를 표현 - Money, Date, Coordinate와 같은 객체가 VO의 대표적인 예시
- 비즈니스 도메인 모델링에 사용
- 객체 동일성을 값으로 판단 - VO는 동일성을 객체의 ID가 아닌 값 자체로 판단한다.
public class PizzaOrderDTO {
private int orderId;
private int customerId;
private List<PizzaDTO> pizzas;
private String deliveryAddress;
private String contactNumber;
private double totalPrice;
// Getters and Setters
}
public class PizzaDTO {
private int pizzaId;
private String name;
private String size;
private List<String> toppings;
private double price;
// Getters and Setters
}
public class PizzaOrderDAO {
private Connection connection;
public PizzaOrderDAO(Connection connection) {
this.connection = connection;
}
public void saveOrder(PizzaOrderDTO order) {
String orderQuery = "INSERT INTO orders (customer_id, delivery_address, contact_number, total_price) VALUES (?, ?, ?, ?)";
String pizzaQuery = "INSERT INTO pizzas (order_id, name, size, price) VALUES (?, ?, ?, ?)";
try {
connection.setAutoCommit(false);
try (PreparedStatement orderStmt = connection.prepareStatement(orderQuery, Statement.RETURN_GENERATED_KEYS)) {
orderStmt.setInt(1, order.getCustomerId());
orderStmt.setString(2, order.getDeliveryAddress());
orderStmt.setString(3, order.getContactNumber());
orderStmt.setDouble(4, order.getTotalPrice());
orderStmt.executeUpdate();
ResultSet generatedKeys = orderStmt.getGeneratedKeys();
if (generatedKeys.next()) {
int orderId = generatedKeys.getInt(1);
try (PreparedStatement pizzaStmt = connection.prepareStatement(pizzaQuery)) {
for (PizzaDTO pizza : order.getPizzas()) {
pizzaStmt.setInt(1, orderId);
pizzaStmt.setString(2, pizza.getName());
pizzaStmt.setString(3, pizza.getSize());
pizzaStmt.setDouble(4, pizza.getPrice());
pizzaStmt.addBatch();
}
pizzaStmt.executeBatch();
}
}
}
connection.commit();
} catch (SQLException e) {
try {
connection.rollback();
} catch (SQLException rollbackEx) {
rollbackEx.printStackTrace();
}
e.printStackTrace();
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
// 등등등
}
- DTO : PizzaOrderDTO와 PizzaDTO는 데이터 전송 객체로, 클라이언트와 서버 간 데이터 전송에 사용.
주문 정보를 포함하여 고객이 피자 주문을 할 때 필요한 데이터를 담고 있다. - DAO : PizzaOrderDAO는 데이터 접근 객체
데이터베이스와 상호작용하여 주문 정보를 저장하거나 조회하는 역할을 한다. - DTO는 데이터를 안전하고 효율적으로 전달하며, DAO는 데이터베이스 접근 로직을 분리하여 코드의 재사용성과 응집력을 높인다.
public final class Address {
private final String street;
private final String city;
private final String state;
private final String zipCode;
public Address(String street, String city, String state, String zipCode) {
this.street = street;
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
// Getters only, no setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
return street.equals(address.street) && city.equals(address.city) && state.equals(address.state) && zipCode.equals(address.zipCode);
}
@Override
public int hashCode() {
return Objects.hash(street, city, state, zipCode);
}
}
- Address 클래스는 불변이며, 동일한 값을 가지는 객체는 동일한 객체로 간주한다.
'백엔드개발 > Spring' 카테고리의 다른 글
MVC 디자인 패턴, 모델 속 요소들 (0) | 2024.05.22 |
---|---|
SPRING Framework (0) | 2024.03.23 |
메이븐 (Maven) (1) | 2024.03.14 |
의존성 주입 (0) | 2024.03.14 |
스프링 프레임워크 (1) | 2024.03.14 |