본문 바로가기

JSP

DTO와 DAO에 대한 이해

DTO : 필드와 메소드 ,getter 그리고 setter등을 쓸 수 있는것

package Model;

public class MemberDTO {

	//DTO(Data Transfer Object) : 데이터 전달 객체
	//테이블 형태 그대로 생성
	
	//필드
	private String ID;
	private String PW;
	private String NAME;
	
	//생성자 메소드 : 객체를 초기화 하기 위한 메소드

	//메소드 생성자메소드
	public MemberDTO(String ID,String PW,String NAME) {
		this.ID=ID;
		this.PW=PW;
		this.NAME=NAME;
	}
	
	//Getter
	public String getID() {
		return ID;
	}
	public String getPW() {
		return PW;
	}
	public String getNAME() {
		return NAME;
	}
}

 

DAO : jdbc에 대한 데이터 연결및 insert,delete,update등등 가능

DAO(Data Access Object) : DB에 접근하는 객체

web-inf : 관리사무소 같은 느낌으로 대부분 파일들을 모으는곳 (webapp-webinf-lib폴더에 넣기)

OracleDriver : Java와 DB사이에 통로를 만들어 주는 역할

executeUpdate : DB에 변화가 생겼을때,select구문을 제외한 모든 구문
executeQuery  : DB에 질의할때,select구문

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class MemberDAO {
	Connection conn = null; // 이걸 안써주면 void db_conn은 지역변수가 되니 
    					전역변수로 바꿔서 다른곳에도 써주기 위해서 사용 밑에 Connection 제거하기
	
	PreparedStatement psmt = null; //회원가입메소드로 db연결종료에 연결하기 위해서
	
	ResultSet rs = null;
	
	//DB연결 메소드 <-- 연결하는것은 return이 없음
	public void db_conn() {
		try {
			//1.ojdbc6.jar 라이브러리 불러오기
			//C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
			
			//2.OracleDriver class 불러오기
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//3.DB에 접속하기 위한 카드키 설정(주소,계정,비번)
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "service";
			String pw = "12345";
			
			//4.DB에 접속 -> 접속 성공시 Connection 객체로 반환
			 conn = DriverManager.getConnection(url,user,pw);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//5.DB연결 종료 메소드
	public void db_close() {
		try {
			if(psmt != null) psmt.close();
			if(conn != null) conn.close();
			if(rs != null) rs.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
--------------------------------------------------------------------	
	//회원가입 메소드
	public int join(MemberDTO dto) {
		int row=0;
		try {
			db_conn();
			
			//5.SQL쿼리 작성 -> ? : 바인드 변수 -> 성능향상 위해서(soft parsing)
			// ID,PW,NAME을 쓰게되면 Hard Parsing으로 성능이 느려진다.
			String sql = "insert into Member1 values(?,?,?)";
			
			//6.SQL문장을 DB에 전달
			psmt = conn.prepareStatement(sql);
			
			//7.바인드 변수 값 채우기
			//psmt.set자료형(물음표 순서, 넣을 값)
			psmt.setString(1, dto.getID());
			psmt.setString(2, dto.getPW());
			psmt.setString(3, dto.getNAME());
			
			//8. 실행하기
			//int로 return하는 이유 : 몇개의 행이 변화 되었는지 알려주는 것
			 row = psmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {//무조건 열려있으면 닫으세요
			db_close();
		}return row; //void로 하면 에러가 뜨지만 int로 바꾸면 에러 사라짐
	}

	public MemberDTO login(MemberDTO dto) {
		MemberDTO login_dto=null;
		try {
			//1.DB연결 메소드 호출
			db_conn();
			
			//2.쿼리문 작성
			String sql = "select * from member1 where id=? and pw=?";
			
			//3.SQL문 DB에 전달 --> PrepareState 객체 생성(psmt)
			psmt = conn.prepareStatement(sql);
			
			//4.받아온 ID와PW를 SQL문에 세팅
			psmt.setString(1, dto.getID());
			psmt.setString(2, dto.getPW());
			
			//5.실행(executeQuery) 메소드 사용-> ResultSet 객체 반환
			rs = psmt.executeQuery();
			
			if(rs.next()) {
				
				String ID = rs.getString(1);
				String PW = rs.getNString("PW");
				String NAME = rs.getString(3);
				
				login_dto=new MemberDTO(ID,PW,NAME);
			}
			
		} catch (Exception e) {
			
		}finally {
			
			//6.DB연결 종료 메소드 호출
			db_close();
		}
		
		return login_dto;
	}
	
	//회원탈퇴 메소드
	public int delete(MemberDTO dto) {
		int row =0;
		try {
			//1.DB연결 메소드 호출
			db_conn();
			
			//2.쿼리문 작성
			String sql = "delete from member1 where id = ?";
			
			//3.SQL문 DB에 전달 --> PrepareState 객체 생성(psmt)
			psmt = conn.prepareStatement(sql);
			
			//4.받아온 ID를 SQL문에 세팅
			psmt.setString(1, dto.getID());
			
			//5.실행하기
			row = psmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			db_close();
		}
		return row;
	}
}

https://sshjim.tistory.com/163

 

'JSP' 카테고리의 다른 글

Cookie  (0) 2023.11.01
URLEncoder와 URLDecoder의 차이  (0) 2023.11.01
form의 3가지 조건,action에 대한 요청  (0) 2023.10.31
내장객체(Implicit Object)  (0) 2023.10.30
주석  (0) 2023.10.30