DTO는 일반적으로 데이터베이스나 다른 소스에서 가져온 데이터를 비즈니스 로직이나 뷰로 전달하기 위해 사용된다. DTO는 일반적으로 데이터를 담는 필드와 해당 필드에 액세스하기 위한 getter/setter 메서드를 포함한다. DTO는 데이터를 담고 전달하기 위한 목적으로만 사용되며, 비즈니스 로직을 처리하지 않는다.
DTO는 일반적으로 데이터베이스나 다른 데이터 소스와의 상호작용을 추상화하는 DAO와 함께 사용된다. DAO는 데이터베이스와의 상호작용을 추상화하는 객체이며, DTO는 데이터를 전달하기 위한 객체입니다. DAO는 데이터를 가져와 DTO에 담는다. 그리고 DTO는 비즈니스 로직이나 뷰에서 사용된다.
DTO는 자바에서의 데이터 전송과 직렬화에 자주 사용된다. DTO는 보통 Serializable 인터페이스를 구현하여 직렬화할 수 있도록 한다. 직렬화는 객체를 바이트 스트림으로 변환하는 프로세스다. 이를 통해 객체를 저장하거나 네트워크를 통해 전송할 수 있다.
자바 빈즈 형식의 클래스 작성하기
1) private 멤버 필드 (테이블의 컬럼을 클래스의 멤버 필드로 작성)
2) public getter/setter
3) 기본 생성자
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
위의 코드와 같이 getter/setter가 존재 해야한다.
create table member(
name varchar2(100),
age number
);
insert into member values('이지은', 31);
insert into member (name, age) values ('김지수', 29);
insert into member values ('이병건', 40);
insert into member values('홍진호', 42);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Scanner;
import oracle.jdbc.driver.OracleDriver;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
String sql; // 실행 할 명령어
Connection conn;
Statement stmt;
ResultSet rs;
String className = OracleDriver.class.getName();
String url = "jdbc:oracle:thin:@192.168.1.100:1521:xe";
String user = "c##itbank";
String password = "it";
ArrayList<MemberDTO> list = new ArrayList<MemberDTO>(); // sql dev에 테이블의 줄 개 수를 예측할 수 없기 때문에 arrlist생성
System.out.print("SQL > ");
sql = sc.nextLine();
Class.forName(className); //jdbc 드라이버 클래스를 로드
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement(); // 연결이 정상적으로 되었는지 확인
rs = stmt.executeQuery(sql);
while(rs.next()) {
MemberDTO ob = new MemberDTO(); // 새로운 객체를 만들어서
ob.setName(rs.getString("name")); // DB의 name을 문자열로 ob에 세팅한다
ob.setAge(rs.getInt("age")); // DB의 age를 정수로 ob에 세팅
list.add(ob); // list에 추가
}
sc.close();
rs.close();
stmt.close();
conn.close();
// 리스트 안에 있는 결과만 내가 원하는 방식으로 출력
list.forEach(member -> {
System.out.printf("name : %s, age : %d살\n", member.getName(), member.getAge());
});
}
}
결과는 입력란에 SQL문을 어떻게 쓰냐에 따라 계속 변할 수 있다
- select * from member
- select * from member where age=31
- select name from member where age between 30 and 40;
- select * from member order by age
- select * from m (error가 발생해도 사진과 같이 '테이블 또는 뷰가 존재하지 않습니다' 와 같은 에러를 자세하게 알려준다)
DAO는 데이터베이스의 테이블에 대한 작업을 수행하는 메소드를 제공한다. 이러한 작업에는 행 추가, 업데이트, 삭제, 검색 등이 포함된다. DAO는 일반적으로 비즈니스 로직과 데이터베이스 상호작용을 분리하기 위해 사용된다. 이는 코드의 유지보수성을 향상시키고 데이터베이스 변경에 대한 영향을 최소화하는 데 도움이 된다.
Java에서 DAO는 일반적으로 JDBC(Java Database Connectivity) API를 사용하여 데이터베이스와 상호작용한다. JDBC는 Java 프로그램에서 데이터베이스에 액세스하기 위한 표준 인터페이스다. DAO는 일반적으로 데이터베이스에 대한 접근을 담당하는 클래스의 인스턴스를 사용하여 데이터베이스와 상호작용한다.