DAO와 DTO
DAO와 DTO !!
DAO와 DTO란 무엇인가??
-
DAO (Data Access Object) : Database의 data에 접근을 하기 위한 객체, 데이터베이스 관련 작업들을 함
ex) driver설정 ,connection, 쿼리문 써주기
-
DTO (Data Transfer Object) : 데이터 전달 단위, 테이블의 컬럼들을 변수로 설정(캡슐화)
이전 JDBC에서는 데이터베이스관련 코드를 한 서블릿에 다 때려넣었지만, DAO와 DTO로 나누면 코드를 알아보기도 훨씬 쉬워지고 관리하기도 좋다.
BookDTO.java
package com.servlet.dto;
public class BookDTO {
int bookId;
String bookName;
String bookLoc;
public BookDTO(int bookId,String bookName,String bookLoc) {
this.bookId = bookId;
this.bookName = bookName;
this.bookLoc = bookLoc;
}
public int getBookId() {
return bookId;
}
public String getBookName() {
return bookName;
}
public String getBookLoc() {
return bookLoc;
}
}
BookDTO는 테이블에 있는 레코드이름들을 필드명으로 사용해주고 생성자,게터세터(생략)도 설정해준다.
BookDAO.java
package com.servlet.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.servlet.dto.BookDTO;
public class BookDAO {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id = "scott";
String pw = "tiger2";
//데이터베이스 연결전 값 설정
public BookDAO(){
try {
Class.forName(driver);
//생성자에 Class.forName(driver)를 적어준다.
}catch(Exception e) {
e.printStackTrace();
}
}
//테이블을 조회하는 쿼리, 어레이리스트로 반환해줌
public ArrayList<BookDTO> select(){
ArrayList<BookDTO> list = new ArrayList<BookDTO>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet res = null;
try {
con = DriverManager.getConnection(url,id,pw);
String sql = "SELECT * FROM book";
pstmt = con.prepareStatement(sql);
res = pstmt.executeQuery();
while(res.next()) {
int bookId = res.getInt("book_id");
String bookName = res.getString("book_name");
String bookLoc = res.getString("book_loc");
BookDTO bookDTO = new BookDTO(bookId,bookName,bookLoc);
list.add(bookDTO);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(res != null) res.close();
if(pstmt !=null) pstmt.close();
if(con !=null) con.close();
}catch(Exception e){
e.printStackTrace();
}
}
return list;
}
}
BookServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.servlet.dao.BookDAO;
import com.servlet.dto.BookDTO;
@WebServlet("/bs")
public class BookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
//기존에 이 서블릿에 한번에 다 써줬었다 -> DAO, DTO 로 나누어줌
/*
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id = "scott";
String pw = "tiger2";
Connection con = null;
Statement stmt = null;
ResultSet res = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url,id,pw);
stmt = con.createStatement();
String sql = "SELECT * FROM book";
res = stmt.executeQuery(sql);
while(res.next()) {
int bookId = res.getInt("book_id");
String bookName = res.getString("book_name");
String bookLoc = res.getString("book_loc");
out.println("bookId : "+bookId+",");
out.println("bookName : "+bookName+",");
out.println("bookLoc : "+bookLoc+"<br>");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(res != null) res.close();
if(stmt !=null) stmt.close();
if(con !=null) con.close();
}catch(Exception e){
e.printStackTrace();
}
}
*/
BookDAO bookDao = new BookDAO();
ArrayList<BookDTO> list = bookDao.select();
for (int i = 0; i < list.size(); i++) {
BookDTO dto = list.get(i);
int bookId = dto.getBookId();
String bookName= dto.getBookName();
String bookLoc = dto.getBookLoc();
out.println("bookId : "+bookId+",");
out.println("bookName : "+bookName+",");
out.println("bookLoc : "+bookLoc+"<br>");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
실행 결과
아직은 나눈 코드가 낯선데, DAO DTO 분리하는 코드에 익숙해지도록 많이 봐야겠다 ㅎㅎ..
Comments