[Servlet 5-2] PhoneBook에 대한 DAO 클래스 만들기

임승현·2022년 12월 2일
0

Servlet

목록 보기
13/14

🐧DTO 클래스 만들기

  1. servelt/Java Resource/src/main/java에 Package생성[xyz.itwill.dto]
  2. [xyz.itwill.dto] Package에 PhoneBookDTO 클래스 생성

🎨PHONEBOOK 테이블의 회원정보를 저장하기 위한 클래스

📌 DTO(Data Transfer Object) 클래스 : 테이블의 행정보를 저장하여 전달하기 위한 클래스 - VO 클래스

📃PhonebookDTO.java

package xyz.itwill.dto;
//
//DTO(Data Transfer Object) 클래스 : 테이블의 행정보를 저장하여 전달하기 위한 클래스 - VO 클래스
//
/*
이름      널?       유형           
------- -------- ------------ 
PHONE   NOT NULL VARCHAR2(20) 
NAME             VARCHAR2(20) 
ADDRESS          VARCHAR2(50) 
*/
//
//PHONEBOOK 테이블의 회원정보를 저장하기 위한 클래스
public class PhonebookDTO {
	private String phone;
	private String name;
	private String address;
	//
	//기본 생성자 : [ctal] + [space] >> Constructor 선택
	public PhonebookDTO() {
		// TODO Auto-generated constructor stub
	}
	//생성자 : [Alt]+[Shift]+[S] >> [O] >> 필드 선택 >> Generate
	public PhonebookDTO(String phone, String name, String address) {
		super();
		this.phone = phone;
		this.name = name;
		this.address = address;
	}
	//Getter & Setter : [Alt]+[Shift]+[S] >> [R] >> 필드 선택 >> Generate
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

🐧DAO 클래스 만들기

  1. servelt/Java Resource/src/main/java에 Package생성[xyz.itwill.dao]
  2. [xyz.itwill.dao] Package에 PhoneBookDAO 클래스 생성

🎨PHONEBOOK 테이블에 회원정보를 삽입,변경,삭제,검색하는 기능을 제공하는 클래스

📌 DAO(Data Access Object) 클래스 : 테이블에 행 삽입,변경,삭제,검색 명령(SQL)을 전달하여 실행하고 처리 결과를 Java 객체(값)으로 반환하는 기능을 제공하는 클래스
→ 싱글톤 클래스(프로그램에 객체를 하나만 제공하는 클래스)로 작성하는 것을 권장

public class PhonebookDAO {
	private static PhonebookDAO _dao;
	//
	public PhonebookDAO() {
		// TODO Auto-generated constructor stub
	}
	static {
		_dao=new PhonebookDAO();
	}
	public static PhonebookDAO getDAO() {
		return _dao;
	}

📢 PHONEBOOK 테이블에 저장된 모든 회원정보를 검색하여 반환하는 메소드

	public List<PhonebookDTO> selectPhonebookList() {
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		List<PhonebookDTO> phonebookList=new ArrayList<PhonebookDTO>();
        try {//try 작성전 JdbcDAO 클래스 생성

🥎JdbcDAO 클래스 생성

📌 JDBC 기능을 제공하는 DAO 클래스가 상속받기 위해 작성된 부모클래스
→ 객체 생성이 목적이 아닌 상속을 목적으로 작성된 클래스 - 추상클래스로 작성하는 것을 권장(abstract)
→ WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용하여 한번만 실행
→ DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
→ 매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드

📃JdbcDAO.java

package xyz.itwill.dao;
//
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//
//JDBC 기능을 제공하는 DAO 클래스가 상속받기 위해 작성된 부모클래스
//→ 객체 생성이 목적이 아닌 상속을 목적으로 작성된 클래스 - 추상클래스로 작성하는 것을 권장(abstract)
//→ WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용하여 한번만 실행
//→ DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
//→ 매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
//
public abstract class JdbcDAO {
	private static DataSource dataSource;
	//
	static {
		try {
			dataSource=(DataSource)new InitialContext().lookup("java:comp/env/jdbc/oracle");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	//DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
	public Connection getConnection() throws SQLException {
		return dataSource.getConnection();//SQLException 에러 떠넘기기
	}
	//매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드
	public void close(Connection con) {
		try {
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
	public void close(Connection con, PreparedStatement pstmt) {
		try {
			if(pstmt!=null) pstmt.close();
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
		try {
			if(rs!=null) rs.close();
			if(pstmt!=null) pstmt.close();
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
		con=getConnection();
		//
		String sql="select * from phonebook order by phone";
		pstmt=con.prepareStatement(sql);
		//
		rs=pstmt.executeQuery();
		//
		while(rs.next()) {
			PhonebookDTO phonebook=new PhonebookDTO();
			phonebook.setPhone(rs.getString("phone"));
			phonebook.setName(rs.getString("name"));
			phonebook.setAddress(rs.getString("address"));
			phonebookList.add(phonebook);
		}
	} catch (SQLException e) {
		System.out.println("[에러]selectPhonebookList() 메소드의 SQL 오류 = "+e.getMessage());
	}finally {
		close(con, pstmt, rs);
	}
	return phonebookList;

📃PhonebookDAO

package xyz.itwill.dao;
//
//DAO(Data Access Object) 클래스 : 테이블에 행 삽입,변경,삭제,검색 명령(SQL)을 전달하여 실행하고 처리 결과를 Java 객체(값)으로 반환하는 기능을 제공하는 클래스
//→ 싱글톤 클래스(프로그램에 객체를 하나만 제공하는 클래스)로 작성하는 것을 권장
//
//PHONEBOOK 테이블에 회원정보를 삽입,변경,삭제,검색하는 기능을 제공하는 클래스
//
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//
import xyz.itwill.dto.PhonebookDTO;
//
public class PhonebookDAO extends JdbcDAO {
	private static PhonebookDAO _dao;
	//
	public PhonebookDAO() {
		// TODO Auto-generated constructor stub
	}
	static {
		_dao=new PhonebookDAO();
	}
	public static PhonebookDAO getDAO() {
		return _dao;
	}
	//PHONEBOOK 테이블에 저장된 모든 회원정보를 검색하여 반환하는 메소드
	public List<PhonebookDTO> selectPhonebookList() {
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		List<PhonebookDTO> phonebookList=new ArrayList<PhonebookDTO>();
		try {//try 작성전 JdbcDAO 클래스 생성
			con=getConnection();
			//
			String sql="select * from phonebook order by phone";
			pstmt=con.prepareStatement(sql);
			//
			rs=pstmt.executeQuery();
			//
			while(rs.next()) {
				PhonebookDTO phonebook=new PhonebookDTO();
				phonebook.setPhone(rs.getString("phone"));
				phonebook.setName(rs.getString("name"));
				phonebook.setAddress(rs.getString("address"));
				phonebookList.add(phonebook);
			}
		} catch (SQLException e) {
			System.out.println("[에러]selectPhonebookList() 메소드의 SQL 오류 = "+e.getMessage());
		}finally {
			close(con, pstmt, rs);
		}
		return phonebookList;
	}
}

🐧Servlet 생성

🎨PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 클라이언트에게 전달하는 서블릿 - DAO

📃PhonenookNewServlet

package xyz.itwill.servlet;
//
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
//
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 xyz.itwill.dao.PhonebookDAO;
import xyz.itwill.dto.PhonebookDTO;
//PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 클라이언트에게 전달하는 서블릿 - DAO
@WebServlet("/new.itwill")
public class PhonenookNewServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	//
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		//
		//PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 반환하는 DAO 클래스의 메소드 호출
		List<PhonebookDTO> phonebookList=PhonebookDAO.getDAO().selectPhonebookList();
		//
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>전화번호부</h1>");
		out.println("<hr>");
		out.println("<table border='1' cellspacing='0'>");
		out.println("<tr>");
		out.println("<th width='200'>전화번호</th>");
		out.println("<th width='200'>이름</th>");
		out.println("<th width='300'>주소</th>");
		out.println("</tr>");
		//List 객체에 저장된 요소를 반복적으로 제공받아 클라이언트에게 전달
		for(PhonebookDTO phonebook:phonebookList) {
			out.println("<tr align='center'>");
			out.println("<td>"+phonebook.getPhone()+"</td>");
			out.println("<td>"+phonebook.getName()+"</td>");
			out.println("<td>"+phonebook.getAddress()+"</td>");
			out.println("</tr>");
		}
		out.println("</table>");
		out.println("</body>");
		out.println("</html>");
	}
}

0개의 댓글