본문 바로가기

IT&코딩/Spring

Spring - 3일차 (MVC_2)

728x90
반응형

■ Quiz 5

 

com.mvc.basic.quiz5 package 생성

 

□ 2개의 인터페이스 생성

 

<IMemberDAO.java>

 

 

<IMemberService.java>

 

 

□ MemberDTO

 

package com.mvc.basic.quiz5;

public class MemberDTO {
	private String id;
	private String pw;
	private String 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 getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}

 

□ MemberDAOImpl 

 

IMemberDAO 인터페이스를 상속받는다. (Override)

 

package com.mvc.basic.quiz5;

import java.util.ArrayList;

public class MemberDAOImpl implements IMemberDAO {
	
	private ArrayList<MemberDTO> members = new ArrayList<>();
	
	@Override
	public void insert(MemberDTO member) {
		members.add(member);
	}

	@Override
	public MemberDTO selectId(String id) {
		
		for(MemberDTO m : members) {
			if(m.getId().equals(id)) {
				return m;
			}
		}
		return null;
	}

	@Override
	public void delete(MemberDTO deleteMember) {
		members.remove(deleteMember);
	}

	@Override
	public ArrayList<MemberDTO> selectAll() {
		
		return members;
	}

	@Override
	public void update(int index, MemberDTO updateMember) {

		members.set(index, updateMember);
	}
	
	public int selectIndex(String id) {
		for(MemberDTO m : members) {
			if(m.getId().equals(id)) {
				return members.indexOf(m);
			}
		}
		return -1;
	}
}

 

□ MemberServiceImpl

 

IMemberService 인터페이스를 상속받는다. (Override)

필요한 경우에 유효성 검사를 진행한다.

 

package com.mvc.basic.quiz5;

import java.util.ArrayList;

public class MemberServiceImpl implements IMemberService {
	
	private MemberDAOImpl memberDao = new MemberDAOImpl();
	
	@Override
	public void insert(String id, String pw, String name) {
		
		if(id == "" || id == null) {
			System.out.println("비정상적인 아이디입니다.");
			return;
		}
		
		if(pw == "" || pw == null) {
			System.out.println("비정상적인 비밀번호입니다.");
			return;
		}
		
		if(name == "" || name == null) {
			System.out.println("비정상적인 이름입니다.");
			return;
		}
		
		MemberDTO check = memberDao.selectId(id);
		if(check == null) {
			MemberDTO member = new MemberDTO();
			member.setId(id);
			member.setPw(pw);
			member.setName(name);
			memberDao.insert(member);
			System.out.println("회원가입이 완료되었습니다.");
		} else {
			System.out.println("이미 가입한 아이디입니다.");
		}
	}

	@Override
	public void selectId(String id) {
		
		MemberDTO member = memberDao.selectId(id);
		
		if(member == null) {
			System.out.println("아이디 정보가 존재하지 않습니다.");
		} else {
			System.out.println("## 검색결과 ##");
			System.out.println("아이디  : " + member.getId());
			System.out.println("비밀번호  : " + member.getPw());
			System.out.println("이름: " + member.getName());
		}
	}

	@Override
	public void delete(String id) {
		MemberDTO deleteMember = memberDao.selectId(id);
		
		if(deleteMember != null) {
			memberDao.delete(deleteMember);
			System.out.print("회원 정보가 삭제되었습니다.");
		} else {
			System.out.println("해당 아이디와 일치하는 정보가 존재하지 않습니다.");
		}
	}

	@Override
	public void selectAll() {
		ArrayList<MemberDTO> members = memberDao.selectAll();
		
		if(members.isEmpty() == true) {
			System.out.println("데이터가 존재하지 않습니다.");
		}else {
			System.out.println("### 모든 회원 정보 ###");
			for(MemberDTO m : members) {
				System.out.println("아이디  : " + m.getId());
				System.out.println("비밀번호  : " + m.getPw());
				System.out.println("이름: " + m.getName());
				System.out.println();
			}
		}
	}

	@Override
	public void update(String id, String currentPw, String changePw) {
		// 사용자가 입력한 현재 비밀번호, 변경 비밀번호
		// 사용자가 입력한 현재 비밀번호와 저장된 현재 비밀번호를 검증한다.
		// 같으면 수정가능, 다르면 안 됨.
		
		MemberDTO check = memberDao.selectId(id);
		if(check != null) {
			if(check.getPw().equals(currentPw)) {
				int index = memberDao.selectIndex(id);
				check.setPw(changePw);
				memberDao.update(index, check);
				System.out.println("비밀번호가 수정되었습니다.");
			} else {
				System.out.println("비밀번호가 일치하지 않습니다.");
			}
		} else {
			System.out.println("아이디 정보가 존재하지 않습니다.");
		}	
	}
}

 

□ Main

 

package com.mvc.basic.quiz5;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		/*
		 * 회원 관리 프로그램 만들기 :  1~5번에 해당하는 메소드 구현
		 * 1.회원등록 : id, password, name 3개의 정보를 id는 중복되지 않도록 등록함. 
		 * 2.회원검색 : id를 이용하여 회원 정보를 검색하여 출력함. 
		 * 3.회원삭제 : id를 이용하여 회원 정보를 삭제함. 
		 * 4.회원 모두 보기 : 모든 정보 출력함. 
		 * 5.비밀번호 수정 : id를 이용하여 비밀번호를 수정함. 
		 * 6.프로그램 종료 : 프로그램을 종료함.
		 */
		Scanner sc = new Scanner(System.in);
		IMemberService memberService = new MemberServiceImpl();
		String id;
		while(true) {
			System.out.println("1. 회원 등록");
			System.out.println("2. 회원 검색");
			System.out.println("3. 회원 삭제");
			System.out.println("4. 회원 모두 보기");
			System.out.println("5. 비밀번호 수정");
			System.out.println("6. 프로그램 종료");
			System.out.print(">>> ");
			String select = sc.next();
			switch(select) {
			case "1": System.out.println(" === 회원 등록 === ");
					System.out.print("아이디 : "); id = sc.next();
					System.out.print("비밀번호 : "); String pw = sc.next();
					System.out.print("이름 : "); String name = sc.next();
					memberService.insert(id, pw, name);
					break;
			case "2": System.out.println(" === 회원 검색 === ");
					System.out.print("아이디 : "); id = sc.next();
					memberService.selectId(id);
					break;
			case "3": System.out.println(" === 회원 삭제 === ");
					System.out.print("아이디 : "); id = sc.next();
					memberService.delete(id);
					break;
			case "4":  memberService.selectAll(); break;
			case "5": System.out.println(" === 비밀번호 수정 === ");
					System.out.print("아이디 : "); id = sc.next();
					System.out.print("현재 비밀번호 : "); String currentPw = sc.next();
					System.out.print("변경 비밀번호 : "); String changePw = sc.next();
					memberService.update(id, currentPw, changePw);
					break;
			case "6": System.out.println("프로그램을 종료합니다."); System.exit(0);
			default:  System.out.println("메뉴 확인 후 다시 입력하세요.");
			
			}
		}
	}
}

 


 

■ Quiz 6

 

com.mvc.basic.quiz6 package 생성

이번에는 데이터베이스와 연동해서 회원관리 프로그램을 만든다.

 

따라서 https://mvnrepository.com/ 에서 'ojdbc8'을 검색 후 코드를 복사해 추가해야 한다.

연동을 위해 pom.xml에 <dependencies>  태그 안에 다음과 같은 태그를 삽입한다.

 

 

□ 2개의 인터페이스 생성

 

<IMemberDAO.java>

 

 

<IMemberService.java>

 

 

□ MemberDTO

 

package com.mvc.basic.quiz6;

public class MemberDTO {
	private String id;
	private String pw;
	private String 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 getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
		
}

 

□ MemberDAOImpl 

 

IMemberDAO 인터페이스를 상속받는다. (Override)

 

package com.mvc.basic.quiz6;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class MemberDAOImpl implements IMemberDAO{
	private Connection con;
	
	public MemberDAOImpl() {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "spring1212";
		String password = "oracle";
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void insert(MemberDTO member) {
		PreparedStatement ps = null;
		String sql = "INSERT INTO db_basic VALUES(?,?,?)";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, member.getId());
			ps.setString(2, member.getPw());
			ps.setString(3, member.getName());
	
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}

	@Override
	public MemberDTO selectId(String id) {
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM db_basic WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if(rs.next()) {
				MemberDTO member = new MemberDTO();
				member.setId(rs.getString("id"));
				member.setPw(rs.getString("pw"));
				member.setName(rs.getString("name"));
				return member;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs != null) rs.close();
				if(ps != null) ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	@Override
	public void delete(MemberDTO deleteMember) {
		PreparedStatement ps = null;
		String sql = "DELETE FROM db_basic WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, deleteMember.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}

	@Override
	public ArrayList<MemberDTO> selectAll() {
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM db_basic";
		ArrayList<MemberDTO> members = new ArrayList<MemberDTO>();
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				MemberDTO member = new MemberDTO();
				member.setId(rs.getString("id"));
				member.setPw(rs.getString("pw"));
				member.setName(rs.getString("name"));
				members.add(member);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs != null) rs.close();
				if(ps != null) ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return members;

	}

	@Override
	public void update(MemberDTO updateMember) {
		PreparedStatement ps = null;
		String sql = "UPDATE db_basic SET pw=? WHERE id=?";
//		String sql = "UPDATE db_basic SET pw=?, name=? WHERE id=?";
		
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, updateMember.getPw());
			ps.setString(2, updateMember.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
}

 

□ MemberServiceImpl

 

IMemberService 인터페이스를 상속받는다. (Override)

필요한 경우에 유효성 검사를 진행한다.

 

package com.mvc.basic.quiz6;

import java.util.ArrayList;

public class MemberServiceImpl implements IMemberService {
	
	private MemberDAOImpl memberDao = new MemberDAOImpl();
	
	@Override
	public void insert(String id, String pw, String name) {
		
		if(id == "" || id == null) {
			System.out.println("비정상적인 아이디입니다.");
			return;
		}
		
		if(pw == "" || pw == null) {
			System.out.println("비정상적인 비밀번호입니다.");
			return;
		}
		
		if(name == "" || name == null) {
			System.out.println("비정상적인 비밀번호입니다.");
			return;
		}
		
		MemberDTO check = memberDao.selectId(id);
		if(check == null) {
			MemberDTO member = new MemberDTO();
			member.setId(id);
			member.setPw(pw);
			member.setName(name);
			memberDao.insert(member);
			System.out.println("회원가입이 완료되었습니다.");
		} else {
			System.out.println("이미 가입한 아이디입니다.");
		}
	}

	@Override
	public void selectId(String id) {
		
		MemberDTO member = memberDao.selectId(id);
		
		if(member == null) {
			System.out.println("아이디 정보가 존재하지 않습니다.");
		} else {
			System.out.println("## 검색결과 ##");
			System.out.println();
			System.out.println("아이디  : " + member.getId());
			System.out.println("비밀번호  : " + member.getPw());
			System.out.println("이름: " + member.getName());
		}
	}

	@Override
	public void delete(String id) {
		MemberDTO deleteMember = memberDao.selectId(id);
		
		if(deleteMember != null) {
			memberDao.delete(deleteMember);
			System.out.print("회원 정보가 삭제되었습니다.");
		} else {
			System.out.println("해당 아이디와 일치하는 정보가 존재하지 않습니다.");
		}
	}

	@Override
	public void selectAll() {
		ArrayList<MemberDTO> members = memberDao.selectAll();
		
		if(members.isEmpty() == true) {
			System.out.println("데이터가 존재하지 않습니다.");
		}else {
			System.out.println("### 모든 회원 정보 ###");
			System.out.println();
			for(MemberDTO m : members) {
				System.out.println("아이디  : " + m.getId());
				System.out.println("비밀번호  : " + m.getPw());
				System.out.println("이름: " + m.getName());
				System.out.println();
			}
		}
	}

	@Override
	public void update(String id, String currentPw, String changePw) {
		// 사용자가 입력한 현재 비밀번호, 변경 비밀번호
		// 사용자가 입력한 현재 비밀번호와 저장된 현재 비밀번호를 검증한다.
		// 같으면 수정가능, 다르면 안 됨.
		
		MemberDTO check = memberDao.selectId(id);
		if(check != null) {
			if(check.getPw().equals(currentPw)) {
				check.setPw(changePw);
				memberDao.update(check);
				System.out.println("비밀번호가 수정되었습니다.");
			} else {
				System.out.println("비밀번호가 일치하지 않습니다.");
			}
		} else {
			System.out.println("아이디 정보가 존재하지 않습니다.");
		}	
	}
}

 

□ Main

 

package com.mvc.basic.quiz6;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		/*
		 * 회원 관리 프로그램 만들기 :  1~5번에 해당하는 메소드 구현
		 * 1.회원등록 : id, password, name 3개의 정보를 id는 중복되지 않도록 등록함. 
		 * 2.회원검색 : id를 이용하여 회원 정보를 검색하여 출력함. 
		 * 3.회원삭제 : id를 이용하여 회원 정보를 삭제함. 
		 * 4.회원 모두 보기 : 모든 정보 출력함. 
		 * 5.비밀번호 수정 : id를 이용하여 비밀번호를 수정함. 
		 * 6.프로그램 종료 : 프로그램을 종료함.
		 */
		Scanner sc = new Scanner(System.in);
		IMemberService memberService = new MemberServiceImpl();
		String id;
		while(true) {
			System.out.println("1. 회원 등록");
			System.out.println("2. 회원 검색");
			System.out.println("3. 회원 삭제");
			System.out.println("4. 회원 모두 보기");
			System.out.println("5. 비밀번호 수정");
			System.out.println("6. 프로그램 종료");
			System.out.print(">>> ");
			String select = sc.next();
			switch(select) {
			case "1": System.out.println(" === 회원 등록 === ");
					System.out.print("아이디 : "); id = sc.next();
					System.out.print("비밀번호 : "); String pw = sc.next();
					System.out.print("이름 : "); String name = sc.next();
					memberService.insert(id, pw, name);
					break;
			case "2": System.out.println(" === 회원 검색 === ");
					System.out.print("아이디 : "); id = sc.next();
					memberService.selectId(id);
					break;
			case "3": System.out.println(" === 회원 삭제 === ");
					System.out.print("아이디 : "); id = sc.next();
					memberService.delete(id);
					break;
			case "4":  memberService.selectAll(); break;
			case "5": System.out.println(" === 비밀번호 수정 === ");
					System.out.print("아이디 : "); id = sc.next();
					System.out.print("현재 비밀번호 : "); String currentPw = sc.next();
					System.out.print("변경 비밀번호 : "); String changePw = sc.next();
					memberService.update(id, currentPw, changePw);
					break;
			case "6": System.out.println("프로그램을 종료합니다."); System.exit(0);
			default:  System.out.println("메뉴 확인 후 다시 입력하세요.");
			
			}
		}
	}
}
728x90
반응형

'IT&코딩 > Spring' 카테고리의 다른 글

Spring - 6일차 (mvc_quiz)  (0) 2022.12.19
Spring - 5일차 (MVC2 모델 실습)  (0) 2022.12.15
Spring - 4일차 (MVC2 모델 이론)  (0) 2022.12.15
Spring - 2일차 (MVC_1)  (0) 2022.12.12
Spring - 1일차 (기본 설정 관련)  (0) 2022.12.12