web : back-end/JSP, Servlet
DAO, DTO 객체이용하여 데이터베이스 연동하기
무니웜테일패드풋프롱스
2020. 5. 18. 10:36
- DAO DTO란
DAO : Data Access Object 데이터베이스에 직접적으로 접근하는 객체
DTO (VO): Data Transfer Object 데이터베이스 내 데이터를 자바 형태로 변환해주는 객체
- 이전에 서블릿 파일에 복잡하고 길게 구현해둔 데이터베이스 연동 부분을 모듈화 시킴
- 따라서 각각 DAO , DTO 패키지 -> 클래스를 만들어준후 그 클래스에서 DAO와 DTO를 구현하면 된다.
DAO 객체
- 생성자를 통해 객체가 생성되면 바로 데이터베이스 연동이 되도록 한다.
- select()메서드에서 BookDTO객체를 통해 ArrayList에 데이터 베이스 내 데이터를 모두 담고, ArrayList 형태로 반환한다.
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:xe";
String id = "scott";
String pw = "tiger";
public BookDAO() { //생성자를 통해 객체가 생성되면 바로 데이터베이스 연동
try {
Class.forName(driver);
}catch(Exception e) {
}
}
public ArrayList<BookDTO> select(){
ArrayList<BookDTO> list = new ArrayList<BookDTO>(); //DTO를 통해 데이터를 arrayList로 받아온다.
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_log");
BookDTO bookDTO = new BookDTO(bookId, bookName, bookLoc);
list.add(bookDTO); //리스트에 객체 추가
}
}catch (Exception e) {
e.printStackTrace();
}finally { //close
try {
if(res!=null) res.close();
if(pstmt!=null) pstmt.close();
if(con!=null) con.close();
}catch(Exception e2) {
e2.printStackTrace();
}
}
return list;
}
}
DTO 객체
- DTO객체는 데이터베이스 내 데이터를 담고 있는 객체이므로 멤버 변수를 해당 데이터 베이스 내의 데이터들로 선언해준다.
- 생성자들을 통해 데이터를 set한다.
- get 메서드를 선언하여 외부에서 해당 데이터에 접근할 수 있도록 해준다.
package com.servlet.dto;
public class BookDTO {
int bookId;
String bookName;
String bookLocation;
public BookDTO(int bookId, String bookName, String bookLocation) {
this.bookId=bookId;
this.bookName=bookName;
this.bookLocation=bookLocation;
}
public int getbookId() {
return bookId;
}
public String getbookName() {
return bookName;
}
public String getbookLocation() {
return bookLocation;
}
}
servlet 파일
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Array;
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(name = "bs", urlPatterns = { "/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();
BookDAO bookDAO = new BookDAO(); //dao 객체 생성->동시에 데이터베이스 연동
ArrayList<BookDTO> list = bookDAO.select(); //select를 통해 데이터를 list에 저장
for(int i =0 ; i<list.size(); i++) {
BookDTO dto = list.get(i);
int bookId = dto.getbookId();
String bookName=dto.getbookName();
String bookLoc = dto.getbookLocation();
out.print(i+"번째 ");
out.print("bookID: "+ bookId +" , ");
out.print("bookName: "+ bookName +" , ");
out.print("bookLoc: "+ bookLoc +" <br> ");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}