카테고리 없음

[Project] 기능구현 (DTO, DAO)

321 2021. 2. 5. 10:23

 

DTO 생성 (Data Transfer Object)


1. 데이터를 사용할때 안전하고 유지보수에 편리하고 용도에 맞게 분별해서 사용할 수 있도록 DTO라는 클래스를 이용한다.

DB를 만들때 사용했던 변수들을 private로 선언해서 이용한다. 변수명도 같게 사용함.

 

 

 

1. 위의 설명대로 변수를 선언한뒤                     

2. Source -> Generate Getter and Setter 을 클릭하고 

 

 

 

 

 

3. Select All -> Generate 클릭

 

 

 

 

4. DTO클래스 완성

 

 

 

 

DAO클래스로 로그인 기능구현


1. 전단계(2021.02.05 - [분류 전체보기] - [Project] tomcat - DB (jdbc) 연결)에서 getConnection을 만들었던 DAO클래스이다.

 

 

2. 1번의 하단에 기능을 구현할 메서드와 반환값, 매개변수를 선언한다.

나는 회원가입기능과 로그인 기능을 구현 할 예정이므로 큰 틀을 이렇게 잡아봤다.

 

  • 2024. 07. 28 지금의 나였으면 service단 에 join, login을 구현했을 것 같다.

 

 

3. 로그인 기능 구현하기

 

public int login(String id, String password) {
		
		String sql = "select * from member where id=? and password=?";
		
		try {
			conn=getConnection();
			ps=conn.prepareStatement(sql);
			ps.setString(1,id);
			ps.setString(2,password);
			rs=ps.executeQuery();
			if(rs.next()) {
				return 1;
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs!=null) rs.close();
				if(ps!=null) ps.close();
				if(conn!=null) conn.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}

		return 0;
	}

 

 

 

4.같은 원리로 join메서드도 만들어준다.

 

 

public int join(String id, String password, String birthday, String email, String hobby) {
		
		int idcheck = idcheck(id);
		if(idcheck<0) {
			return -1;
		}
		String sql = "insert into member values(?,?,?,?,?)";
		
		try {
			conn = getConnection();

			ps = conn.prepareStatement(sql);
			ps.setString(1,id);
			ps.setString(2,password);
			ps.setString(3,birthday);
			ps.setString(4,email);
			ps.setString(5,hobby);
			
			rs = ps.executeQuery();
			if(rs.next()) {
				return 1;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs!=null) rs.close();
				if(ps!=null) ps.close();
				if(conn!=null) conn.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return 0;
	}

 

+) idcheck 메서드도 만들어서 완성도를 높인다

public int idcheck(String id) {
		
		String sql = "select * from member where id = ?";
		
		try {
			conn = getConnection();
			
			ps = conn.prepareStatement(sql);
			ps.setString(1, id);
			rs=ps.executeQuery();
			
			if(rs.next()) {
				return -1;	
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs!=null) rs.close();
				if(ps!=null) ps.close();
				if(conn!=null) conn.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return 1;
	}

 

 

  • DTO 클래스에서 생성자나 ToString을 용도에 따라 만들 수 있다.
  • DAO login클래스의 return값이 int인 것은 가장 편하고 보편적이라서 그렇다. (상황에 따라 달라져도 문제는 없음)

 

2024. 07. 28 내용 추가

 

jdbc에서 connection을 close 해 주지 않았을 때 어떤 일이 일어나는지 실습해 봅시다.

jdbc를 사용할 때, connection을 close 해 주지 않으면 어떤 일이 벌어질까요? 파일을 열어놓고 close를 안 하면 fd가 낭비되는 것처럼 connection이 계속 쌓이다가, connection이 고갈될 겁니다. jdbc mysql과 연

codingdog.tistory.com

https://velog.io/@miot2j/Spring-DB%EC%BB%A4%EB%84%A5%EC%85%98%ED%92%80%EA%B3%BC-Hikari-CP-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

[Spring] DB커넥션풀과 Hikari CP 알아보기

실무환경에서 DataBase 성능 최적화 및 ORM에 대해 이야기 할때 커넥션풀이라는 단어가 자주 등장하여 한번 정리가 필요할 것 같아 정리한 포스트 입니다.

velog.io

https://techblog.woowahan.com/2606/

 

응? 이게 왜 롤백되는거지? | 우아한형제들 기술블로그

이 글은 얼마 전 에러로그 하나에 대한 호기심과 의문으로 시작해서 스프링의 트랜잭션 내에서 예외가 어떻게 처리되는지를 이해하기 위해 삽질을 해본 경험을 토대로 쓰여졌습니다. 스프링의

techblog.woowahan.com