JSP| DAO, DTO, 커넥션 풀
DAO,DTO
-
DAO(Data Access Object): 데이터베이스의 data에 접근하기 위한 객체. CRUD 작업. DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용(코드의 모듈화)
-
DTO(Data Transfer Object): 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는~~ 로직~~을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스) . 자바빈과 같은 구조
유저가 입력한 데이터를 DB에 넣는 과정
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣습니다.
- memberSelect
<%@page import="com.javalec.daotoex.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.javalec.daotoex.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<!--
1. 유저가 자신의 브라우저에서 데이터를 입력하여 **form에 있는 데이터를 DTO(자바 객체화)에 넣어서 전송**
2. 해당 DTO를 받은 **서버가 DAO(DB access)를 이용하여 **데이터베이스로 데이터를 집어넣습니다.
-->
<title>Insert title here</title>
</head>
<body>
<%
/*DAO(Data Access Object): 데이터베이스의 data에 접근하기 위한 객체.
CRUD작업, 코드의 모듈화 */
MemberDAO memberDAO = new MemberDAO();
//DAO의 mSelect()메서드를 실행하니까 dtos라는 멤버 타입이 DTO인 ArrayList 가 나왔다
ArrayList<MemberDTO> dtos = memberDAO.memberSelect();
for(int i=0; i<dtos.size(); i++) {
MemberDTO dto = dtos.get(i);
String name = dto.getName();
String id = dto.getId();
String pw = dto.getPw();
String phone = dto.getPhone1() + " - "+ dto.getPhone2() + " - " + dto.getPhone3();
String gender = dto.getGender();
out.println("이름 : " + name + ", 아이디 : " + id + ", 비밀번호 : " + pw + ", 연락처 : " + phone + ", 성별 : " + gender + "<br />" );
}
%>
</body>
</html>
- MemberDTO(자바 객체화)
package com.javalec.daotoex;
//데이터 베이스에 있는 데이터를 자바에 있는 객체로 바꿔줌
public class MemberDTO {
private String name;
private String id;
private String pw;
private String phone1;
private String phone2;
private String phone3;
private String gender;
public MemberDTO(String name, String id, String pw, String phone1, String phone2, String phone3, String gender) {
this.name = name;
this.id = id;
this.pw = pw;
this.phone1 = phone1;
this.phone2 = phone2;
this.phone3 = phone3;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getPhone1() {
return phone1;
}
public void setPhone1(String phone1) {
this.phone1 = phone1;
}
public String getPhone2() {
return phone2;
}
public void setPhone2(String phone2) {
this.phone2 = phone2;
}
public String getPhone3() {
return phone3;
}
public void setPhone3(String phone3) {
this.phone3 = phone3;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
- memberDAO(DB 억세스)
package com.javalec.daotoex;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
//데이터베이스 억세스
public class MemberDAO {
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String uid = "scott";
private String upw = "tiger";
public MemberDAO() {
try {
// 생성하면 바로 드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
public ArrayList<MemberDTO> memberSelect() {
ArrayList<MemberDTO> dtos = new ArrayList<MemberDTO>();
Connection con =null;
Statement stmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, uid, upw);
stmt = con.createStatement();
rs = stmt.executeQuery("select * from member");
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
String pw = rs.getString("pw");
String phone1 = rs.getString("phone1");
String phone2 = rs.getString("phone2");
String phone3 = rs.getString("phone3");
String gender = rs.getString("gender");
//while문으로 만들어진 객체 ArrayList<MemberDTO> dtos에 계속 넣기
MemberDTO dto = new MemberDTO(name, id, pw, phone1, phone2, phone3, gender);
dtos.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return dtos;
}
}
PreparedStatement
- Statement의 난잡한 코드를 개선
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%!
//db연결 정보
Connection connection;
PreparedStatement preparedStatement;
ResultSet resultSet;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "scott";
String upw = "tiger";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
try{
//db 연결
Class.forName(driver);
connection = DriverManager.getConnection(url, uid, upw);
int n;
//db에 쿼리문 실행
String query = "insert into memberforpre (id, pw, name, phone) values (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, "abc");
preparedStatement.setString(2, "123");
preparedStatement.setString(3, "홍길동");
preparedStatement.setString(4, "010-1234-5678");
n = preparedStatement.executeUpdate();
preparedStatement.setString(1, "def");
preparedStatement.setString(2, "456");
preparedStatement.setString(3, "홍길자");
preparedStatement.setString(4, "010-9012-3456");
n = preparedStatement.executeUpdate();
preparedStatement.setString(1, "ghi");
preparedStatement.setString(2, "789");
preparedStatement.setString(3, "홍길순");
preparedStatement.setString(4, "010-7890-1234");
n = preparedStatement.executeUpdate();
preparedStatement.setString(1, "AAA");
preparedStatement.setString(2, "111");
preparedStatement.setString(3, "이길동");
preparedStatement.setString(4, "010-1234-1111");
n = preparedStatement.executeUpdate();
//n이 가르키는 것은 무엇인가...?
//n = preparedStatement.executeUpdate();
// 실행결과가 1개
if(n == 1) {
out.println("insert success");
} else {
out.println("insert fail");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try{
if(resultSet != null) resultSet.close();
if(preparedStatement != null) preparedStatement.close();
if(connection != null) connection.close();
} catch(Exception e){}
}
%>
<br />
<a href="memberDateView.jsp">회원정보 보기</a>
</body>
</html>
커넥션 풀 (DBCP)
- 여러 클라이언트가 몰리면 웹에 부하가 걸릴 수 있음
- 그래서 먼저 커넥션풀을 생성해놓고 사용할 수 있게 만듬(미리미리 DB에 접속을 해놓는 것)
Author And Source
이 문제에 관하여(JSP| DAO, DTO, 커넥션 풀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kji306301/JSP-커넥션-풀저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)