OMR이 여기서 파생된 것 같다

개념

Table Data Gateway는 데이터베이스 테이블에 대한 모든 접근을 처리하는 객체입니다. 한 테이블의 모든 SQL 작업을 단일 클래스에서 캡슐화하는 것이 특징입니다.

실생활 비유

은행 창구 직원과 비슷합니다:

코드 예시

public class CustomerGateway {
    private Connection connection;

    // 조회 메서드
    public List<CustomerDTO> findAll() {
        String sql = "SELECT * FROM customers";
        List<CustomerDTO> customers = new ArrayList<>();

        try (PreparedStatement stmt = connection.prepareStatement(sql);
             ResultSet rs = stmt.executeQuery()) {

            while (rs.next()) {
                CustomerDTO customer = new CustomerDTO(
                    rs.getLong("id"),
                    rs.getString("name"),
                    rs.getString("email")
                );
                customers.add(customer);
            }
        }
        return customers;
    }

    // 특정 조건 조회
    public CustomerDTO findById(Long id) {
        String sql = "SELECT * FROM customers WHERE id = ?";

        try (PreparedStatement stmt = connection.prepareStatement(sql)) {
            stmt.setLong(1, id);
            ResultSet rs = stmt.executeQuery();

            if (rs.next()) {
                return new CustomerDTO(
                    rs.getLong("id"),
                    rs.getString("name"),
                    rs.getString("email")
                );
            }
        }
        return null;
    }

    // 삽입 메서드
    public void insert(CustomerDTO customer) {
        String sql = "INSERT INTO customers (name, email) VALUES (?, ?)";

        try (PreparedStatement stmt = connection.prepareStatement(sql)) {
            stmt.setString(1, customer.getName());
            stmt.setString(2, customer.getEmail());
            stmt.executeUpdate();
        }
    }

    // 수정 메서드
    public void update(CustomerDTO customer) {
        String sql = "UPDATE customers SET name = ?, email = ? WHERE id = ?";

        try (PreparedStatement stmt = connection.prepareStatement(sql)) {
            stmt.setString(1, customer.getName());
            stmt.setString(2, customer.getEmail());
            stmt.setLong(3, customer.getId());
            stmt.executeUpdate();
        }
    }
}

주요 특징

  1. 단일 책임
  2. 데이터 전달

장점과 단점

장점

단점

  1. 어떤** 게이트웨이를 쓸것인가
  2. 게이트웨이에 어떤 값을 넣어서 질의할 것인가