[Spring] DAO, DTO, VO
DAO(Data Access Object)
- DB의 데이터에 접근하기 위한 객체
Persistence Layer(DB에 데이터를 CRUD하는 계층)
- DB 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용
- DB와 연결한 Connection까지 설정되어 있는 경우가 많음
- MyBatis등을 사용할 경우 커넥션 풀까지 제공 → DAO를 별도로 만드는 경우 드물다.
public class TestDao {
public void add(TestDTO dto) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");
PreparedStatement pstmt = conn.prepareStatement("insert into users(id,name,password) value(?,?,?)");
pstmt.setString(1, dto.getId());
pstmt.setInt(2, dto.getName());
pstmt.setString(3, dto.getPwd());
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
}
DTO (Data Transfer Object)
- 계층 간 데이터 교환을 위한 자바 Beans
(여기서 계층은 Controller, View, Business Layer, Persistence Layer)
- DB 레코드의 데이터를 매핑하기 위한 데이터 객체
- DB 데이터를 Controller, Service로 보낼 때 사용
- 로직 갖고 있지 않음 - 순수한 데이터 객체
- 데이터와 Getter, Setter 존재
(추가적으로 toString(), equals() 등 Object 메서드 작성 가능)
public class TestDTO {
private String id;
private String name;
private String pwd;
public String getId() {
return id;
}
public void setId(String id) {
this.name = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.name = pwd;
}
}
Property
- Getter와 Setter에서 Get, Set 이후에 나오는 단어가 Property라고 약속
- Property는 위에서 id, name, pwd
- Property는 멤버변수로 결정되는 것이 아니라 getter setter에서 나온 id, name, pwd로 결정
- 자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법 사용하고 데이터 자동화 처리에서 가장 중요한 것은 표준 규격!
(자바 리플렉션? 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API)
- id, name, pwd가 키 값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있음
- 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter 실행
VO (Value Object)
- DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 존재
(DTO와 VO 모두 Getter를 통해 사용)
- 데이터 그 자체로 의미 있는 것을 담고 있는 객체
- 불변 클래스(Read Only 속성 객체)
Persistence Layer(DB에 데이터를 CRUD하는 계층)
public class TestDao {
public void add(TestDTO dto) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");
PreparedStatement pstmt = conn.prepareStatement("insert into users(id,name,password) value(?,?,?)");
pstmt.setString(1, dto.getId());
pstmt.setInt(2, dto.getName());
pstmt.setString(3, dto.getPwd());
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
}
- 계층 간 데이터 교환을 위한 자바 Beans
(여기서 계층은 Controller, View, Business Layer, Persistence Layer) - DB 레코드의 데이터를 매핑하기 위한 데이터 객체
- DB 데이터를 Controller, Service로 보낼 때 사용
- 로직 갖고 있지 않음 - 순수한 데이터 객체
- 데이터와 Getter, Setter 존재
(추가적으로 toString(), equals() 등 Object 메서드 작성 가능)
public class TestDTO {
private String id;
private String name;
private String pwd;
public String getId() {
return id;
}
public void setId(String id) {
this.name = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.name = pwd;
}
}
Property
- Getter와 Setter에서 Get, Set 이후에 나오는 단어가 Property라고 약속
- Property는 위에서 id, name, pwd
- Property는 멤버변수로 결정되는 것이 아니라 getter setter에서 나온 id, name, pwd로 결정
- 자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법 사용하고 데이터 자동화 처리에서 가장 중요한 것은 표준 규격!
(자바 리플렉션? 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API) - id, name, pwd가 키 값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있음
- 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter 실행
VO (Value Object)
- DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 존재
(DTO와 VO 모두 Getter를 통해 사용)
- 데이터 그 자체로 의미 있는 것을 담고 있는 객체
- 불변 클래스(Read Only 속성 객체)
(DTO와 VO 모두 Getter를 통해 사용)
VO는 특정한 비즈니스 값을 담는 객체이고, DTO는 Layer간의 통신 용도로 오고가는 객체
Author And Source
이 문제에 관하여([Spring] DAO, DTO, VO), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@arielgv829/Spring-DAO-DTO-VO저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)