햄찌개

JAVA- MVC 회원관리 예제 본문

고급 JAVA

JAVA- MVC 회원관리 예제

햄찌개 2020. 10. 7. 09:27

MemberMain

package kr.or.ddit.member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.JDBCUtill;

/*
	회원정보를 관리하는 프로그램을 작성하는데 
	아래의 메뉴를 모두 구현하시오. (CRUD기능 구현하기)
	(DB의 MYMEMBER테이블을 이용하여 작업한다.)
	
	* 자료 삭제는 회원ID를 입력 받아서 삭제한다.
	
	예시메뉴)
	----------------------
		== 작업 선택 ==
		1. 자료 입력			---> insert
		2. 자료 삭제			---> delete
		3. 자료 수정			---> update
		4. 전체 자료 출력	---> select
		5. 작업 끝.
	----------------------
	 
	   
// 회원관리 프로그램 테이블 생성 스크립트 
create table mymember(
    mem_id varchar2(8) not null,  -- 회원ID
    mem_name varchar2(100) not null, -- 이름
    mem_tel varchar2(50) not null, -- 전화번호
    mem_addr varchar2(128)    -- 주소
);

*/
public class MemberMain {
	
	private IMemberService memService;
	private Scanner scan;
	
	public MemberMain() {
	memService = new MemberServiceImpl();
	scan = new Scanner(System.in); 
	}

	 
	
	/**
	 * 메뉴를 출력하는 메서드
	 */
	public void displayMenu(){
		System.out.println();
		System.out.println("----------------------");
		System.out.println("  === 작 업 선 택 ===");
		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.println("----------------------");
		System.out.print("원하는 작업 선택 >> ");
	}
	
	/**
	 * 프로그램 시작메서드
	 */
	public void start(){
		int choice;
		do{
			displayMenu(); //메뉴 출력
			choice = scan.nextInt(); // 메뉴번호 입력받기
			switch(choice){
				case 1 :  // 자료 입력
					insertMember();
					break;
				case 2 :  // 자료 삭제
					deleteMember();
					break;
				case 3 :  // 자료 수정
					updateMember();
					break;
				case 4 :  // 전체 자료 출력
					displayMemberAll();
					break;
				case 5 :  // 자료 검색
					getSearchMember();
					break;
				case 6 :  // 작업 끝
					System.out.println("작업을 마칩니다.");
					break;
				default :
					System.out.println("번호를 잘못 입력했습니다. 다시입력하세요");
			}
		}while(choice!=6);
	}
	
	
	
	/**
	 * 회원 정보를 삭제하는 메서드
	 * (입력받은 회원 ID를 이용하여 삭제한다.)
	 */
	private void deleteMember() {
		System.out.println();
		System.out.println("삭제할 회원의 정보를 입력하세요");
		System.out.print("회원 ID >> ");
		String memId = scan.next();
		

		int cnt = memService.deleteMember(memId);
				
			
			if(cnt>0) {
				System.out.println(memId+"님의 정보 삭제 완료...");
			}else {
				System.out.println(memId+"님의 정보 삭제 실패...");	
			}
		
	}

	/**
	 * 회원 정보를 수정하는 메서드
	 */
	private void updateMember() {
		boolean chk = false;	//기존 회원 존재여부 체크
		String memId =  "";
		
		do {
			System.out.println();
			System.out.println("수정할 회원의 정보를 입력하세요");
			System.out.print("회원 ID >> ");
			memId = scan.next();
			
			chk= getMember(memId);
			
			if(!chk) {
				System.out.println("회원 ID가 "+ memId+"인 회원은 없습니다.");
				System.out.println("다시 입력해주세요.");
			}
		
		
		}while(chk==false);
		
		System.out.println("회원 이름 >>");
		String memName = scan.next();
		System.out.println("회원 전화번호 >>");
		String memTel = scan.next();
		
		scan.nextLine();	//입력버퍼 비우기
		System.out.println("회원주소 >>");
		String memAddr = scan.nextLine();
		
		
		MemberVO mv = new MemberVO();

		mv.setMem_id(memId);
		mv.setMem_name(memName);
		mv.setMem_tel(memTel);
		mv.setMem_addr(memAddr);
		
		int cnt = memService.updateMember(mv);
		
		
			if(cnt >0) {
				System.out.println(memId+"님의 정보를 수정하였습니다...");
			}else {
				System.out.println(memId+"님의 정보를 수정 못했습니다....실패!!");
			}
	
	}

	/**
	 * 전체 회원을 출력하는 메서드
	 */
	private void displayMemberAll() {
		System.out.println();
		System.out.println("===================================");
		System.out.println("ID\t이름\t전화번호\t\t주소");
		System.out.println("===================================");
		
		List<MemberVO> memList = memService.displayMemberAll();
		for (MemberVO memVO : memList) {
			System.out.println(memVO.getMem_id() 
					+ "\t" + memVO.getMem_name() 
					+ "\t" + memVO.getMem_tel() 
					+ "\t\t"+ memVO.getMem_addr());
		}
		System.out.println("=============================================");
			System.out.println("출력 작업 끝 ...");
			
		
	}

	/**
	 * 회원을 추가하는 메서드
	 */
	private void insertMember() {
		boolean chk = false;	//기존 회원 존재여부 체크
		String memId =  "";
		
		do {
			System.out.println();
			System.out.println("추가할 회원의 정보를 입력하세요");
			System.out.print("회원 ID >> ");
			memId = scan.next();
			
			chk= getMember(memId);
			
			if(chk) {
				System.out.println("회원 ID가 "+ memId+"인 회원은 이미 존재합니다.");
				System.out.println("다시 입력해주세요.");
			}
		
		
		}while(chk==true);
		
		System.out.println("회원 이름 >>");
		String memName = scan.next();
		System.out.println("회원 전화번호 >>");
		String memTel = scan.next();
		
		scan.nextLine();	//입력버퍼 비우기
		System.out.println("회원주소 >>");
		String memAddr = scan.nextLine();
		
		MemberVO mv = new MemberVO();
		
		mv.setMem_id(memId);
		mv.setMem_name(memName);
		mv.setMem_tel(memTel);
		mv.setMem_addr(memAddr);
		
		int cnt = memService.insertMember(mv);
		
			if(cnt>0) {
				System.out.println(memId+" 회원 추가 성공...");
			}else {
				System.out.println(memId+" 회원 추가 실패...");
			}
		
	}

	/**.
	 * 회원 ID를 이용하여 회원이 있는지 알려주는 메서드 
	 * @param memId
	 * @return
	 */
	private boolean getMember(String memId) {
		return memService.getMember(memId);
	}

	/**
	 * 회원 정보를 검색하는 메서드
	 */
	public void getSearchMember() {
		/**
		 * 검색할 회원 ID, 회원이름, 전화번호, 주소를 입력하면 
		 * 검색한 정보만 사용하여 검색하는 기능을 구현하시오.
		 * 주소는 입력한 값이 포함만 되어도 검색되도록한다.
		 * 입력을 하지 않을 자료는 엔터키로 다음 입력으로 넘긴다.
		 */
		scan.nextLine();//입력 버퍼 지우기
		System.out.println();
		System.out.println("검색할 정보를 입력하세요.");
		
		System.out.print("회원ID >>");
		String memId = scan.nextLine().trim();
		
		System.out.print("회원이름 >>");
		String memName = scan.nextLine().trim();
		
		System.out.print("회원 전화번호 >>");
		String memtel = scan.nextLine().trim();
		
		System.out.print("회원 주소 >>");
		String memAddr = scan.nextLine().trim();
		
		MemberVO mv = new MemberVO();
		mv.setMem_id(memId);
		mv.setMem_name(memName);
		mv.setMem_tel(memtel);
		mv.setMem_addr(memAddr);
		
	
				
		//입력한 정보로 검색한 내용을 출력하기 
		System.out.println();
		System.out.println("===================================");
		System.out.println("ID\t이름\t전화번호\t\t주소");
		System.out.println("===================================");
		
		List<MemberVO> memList = memService.getSearchMember(mv);
		
		for (MemberVO memVO : memList) {
			System.out.println(memVO.getMem_id() 
					+ "\t" + memVO.getMem_name() 
					+ "\t" + memVO.getMem_tel() 
					+ "\t\t"+ memVO.getMem_addr());
		}
		System.out.println("=============================================");
			System.out.println("출력 작업 끝 ...");
		
	}
	
	
	
	public static void main(String[] args) {
		MemberMain memObj = new MemberMain();
		memObj.start();
	}

}







MemberVO

package kr.or.ddit.member.vo;

/**
 * DB 테이블에 있는 컬럼을 기준으로 데이터를 객체화한 클래스이다.
 * 
 * @author PC-17
 *         <p>
 *         DB테이블의 '컬럼'이 클래스의 '멤버변수'가 된다. <br>
 *         DB테이블의 컬럼과 클래스의 멤버변수를 매핑하는 역할을 수행한다. <br>
 *         </p>
 */
public class MemberVO {
	private String mem_id;
	private String mem_name;
	private String mem_tel;
	private String mem_addr;
	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	public String getMem_tel() {
		return mem_tel;
	}
	public void setMem_tel(String mem_tel) {
		this.mem_tel = mem_tel;
	}
	public String getMem_addr() {
		return mem_addr;
	}
	public void setMem_addr(String mem_addr) {
		this.mem_addr = mem_addr;
	}
	@Override
	public String toString() {
		return "MemberVO [mem_id=" + mem_id + ", mem_name=" + mem_name + ", mem_tel=" + mem_tel + ", mem_addr="
				+ mem_addr + "]";
	}
	
}

JDBCUtill

package kr.or.ddit.util;


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

/**
 * JDBC 드라이버를 로딩하고 Connection객체를 생성하는 메서드 제공 
 */
public class JDBCUtill {

	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("드라이버 로딩 완료 ...");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패 ...");
		}
	}

	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521/xe",
					"JEON",
					"java");
					
		} catch (SQLException e) {
			System.out.println("DB 연결 실패...");
			return null;
		}
		
	}
	/**
	 * 자원 반납하는 메서드
	 * @param conn
	 * @param stmt
	 * @param pstmt
	 * @param rs
	 */
	public static void disConnect(Connection conn, Statement stmt, PreparedStatement pstmt, ResultSet rs) {
		if(rs!=null)try {rs.close();}catch (SQLException ex) {ex.printStackTrace();}
		if(stmt!=null)try {stmt.close();}catch (SQLException ex) {ex.printStackTrace();}
		if(pstmt!=null)try {pstmt.close();}catch (SQLException ex) {ex.printStackTrace();}
		if(conn!=null)try {conn.close();}catch (SQLException ex) {ex.printStackTrace();}
	}
	
	
	
}

IMemberService

package kr.or.ddit.member.service;

import java.util.List;

import kr.or.ddit.member.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 받아 Controll에 전달하는 Service의 interface
 * @author PC-17
 *
 */
public interface IMemberService {
	/**
	 * MemberVo에 담긴 자료를 DB에 insert하는 메서드
	 * 
	 * @param mv DB에 insert할 자료가 저장된 MemberVO객체
	 * @return DB작업이 성공하면 1이상인 값이 반환되고 실패하면 0이 반환된다.
	 */
	public int insertMember(MemberVO mv);

	/**
	 * 회원 ID를 매개변수로 받아서 그 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId
	 * @return 작업성공 :1, 작업실패 : 0
	 */
	public int deleteMember(String memId);

	/**
	 * 하나의 MemberVO자료를 이용하여 DB를 update하는 메서드
	 * 
	 * @param mv update할 회원정보가 들어있는 MemberVO객체
	 * @return 작업성공 :1, 작업실패 :0
	 */
	public int updateMember(MemberVO mv);

	/**
	 * DB의 mymember테이블의 전체 레코드를 가져와서 List에 담아서 반환하는 메서드
	 * @return MemberVO객체를 담고있는 List객체
	 */
	public List<MemberVO> displayMemberAll();

	/**
	 * 주어진 회원 ID가 존재하는지 여부를 알아내는 메서드
	 * @param memId 
	 * @return 해당회원이 존재하면 true, 없으면 false
	 */
	public boolean getMember(String memId);
	
	/**
	 * MemberVO에 담긴 자료를 이용하여 회원을 검색하는 메서드
	 * @param mv 검색할 자료가 담긴 MemberVO객체
	 * @return 검색된 결과를 담은 List객체
	 */
	public List<MemberVO> getSearchMember(MemberVO mv);
	
}


MemberServiceImpl

package kr.or.ddit.member.service;

import java.util.List;

import kr.or.ddit.member.dao.IMemberDao;
import kr.or.ddit.member.dao.MemberDaoImpl;
import kr.or.ddit.member.vo.MemberVO;

public class MemberServiceImpl implements IMemberService{

	private IMemberDao memDao;
	
	public MemberServiceImpl() {
		memDao = new MemberDaoImpl();
	}

	@Override
	public int insertMember(MemberVO mv) {
		return memDao.insertMember(mv);
	}

	public void reservation(MemberVO mv) {
		//좌석 선택 ...(좌석선택 DAO 호출)
		
		//계좌이체 기능
		
		//사용자한테 메일 발송...
	}
	
	@Override
	public int deleteMember(String memId) {
		return memDao.deleteMember(memId);
	}

	@Override
	public int updateMember(MemberVO mv) {
		return memDao.updateMember(mv);
	}

	@Override
	public List<MemberVO> displayMemberAll() {
		return memDao.displayMemberAll();
	}

	@Override
	public boolean getMember(String memId) {
		return memDao.getMember(memId);
	}

	@Override
	public List<MemberVO> getSearchMember(MemberVO mv) {
		
		return memDao.getSearchMember(mv);
	}

	
}

IMemberDao

package kr.or.ddit.member.dao;

import java.util.List;

import kr.or.ddit.member.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 받아 Service에 전달하는 DAO의 interface
 * 
 * @author PC-17
 *
 */
public interface IMemberDao {
	/**
	 * MemberVo에 담긴 자료를 DB에 insert하는 메서드
	 * 
	 * @param mv DB에 insert할 자료가 저장된 MemberVO객체
	 * @return DB작업이 성공하면 1이상인 값이 반환되고 실패하면 0이 반환된다.
	 */
	public int insertMember(MemberVO mv);

	/**
	 * 회원 ID를 매개변수로 받아서 그 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId
	 * @return 작업성공 :1, 작업실패 : 0
	 */
	public int deleteMember(String memId);

	/**
	 * 하나의 MemberVO자료를 이용하여 DB를 update하는 메서드
	 * 
	 * @param mv update할 회원정보가 들어있는 MemberVO객체
	 * @return 작업성공 :1, 작업실패 :0
	 */
	public int updateMember(MemberVO mv);

	/**
	 * DB의 mymember테이블의 전체 레코드를 가져와서 List에 담아서 반환하는 메서드
	 * @return MemberVO객체를 담고있는 List객체
	 */
	public List<MemberVO> displayMemberAll();

	/**
	 * 주어진 회원 ID가 존재하는지 여부를 알아내는 메서드
	 * @param memId 
	 * @return 해당회원이 존재하면 true, 없으면 false
	 */
	public boolean getMember(String memId);
	
	/**
	 * MemberVO에 담긴 자료를 이용하여 회원을 검색하는 메서드
	 * @param mv 검색할 자료가 담긴 MemberVO객체
	 * @return 검색된 결과를 담은 List객체
	 */
	public List<MemberVO> getSearchMember(MemberVO mv);
}

MemberDaoImpl

package kr.or.ddit.member.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.JDBCUtill;

public class MemberDaoImpl implements IMemberDao {

	private Connection conn;
	private Statement stmt;
	private PreparedStatement pstmt;
	private ResultSet rs;

	@Override
	public int insertMember(MemberVO mv) {
		int cnt = 0;
		try {
			conn = JDBCUtill.getConnection();
			String sql = "insert into myMember " + " (mem_id,mem_name,mem_tel,mem_addr) " + " values(?,?,?,?) ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, mv.getMem_id());
			pstmt.setString(2, mv.getMem_name());
			pstmt.setString(3, mv.getMem_tel());
			pstmt.setString(4, mv.getMem_addr());

			cnt = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}

		return cnt;
	}

	@Override
	public int deleteMember(String memId) {
		int cnt = 0;
		try {
			conn = JDBCUtill.getConnection();

			String sql = "delete from mymember where mem_id=?";

			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);

			cnt = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}

		return cnt;
	}

	@Override
	public int updateMember(MemberVO mv) {
		int cnt = 0;
		try {
			conn = JDBCUtill.getConnection();

			String sql = " update mymember set " + " mem_name= ?," + " mem_tel= ?," + " mem_addr= ? "
					+ " where mem_id = ? ";

			pstmt = conn.prepareStatement(sql);

			pstmt.setString(1, mv.getMem_name());
			pstmt.setString(2, mv.getMem_tel());
			pstmt.setString(3, mv.getMem_addr());
			pstmt.setString(4, mv.getMem_id());

			cnt = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}

		return cnt;
	}

	@Override
	public List<MemberVO> displayMemberAll() {

		List<MemberVO> memList = new ArrayList<MemberVO>();
		try {
			conn = JDBCUtill.getConnection();
			String sql = " select * from mymember ";

			stmt = conn.createStatement();

			rs = stmt.executeQuery(sql);

			while (rs.next()) {

				MemberVO mv = new MemberVO();
				mv.setMem_id(rs.getString("mem_id"));
				mv.setMem_name(rs.getString("mem_name"));
				mv.setMem_tel(rs.getString("mem_tel"));
				mv.setMem_addr(rs.getString("mem_addr"));

				memList.add(mv);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}

		return memList;
	}

	@Override
	public boolean getMember(String memId) {
		boolean chk = false;

		try {
			conn = JDBCUtill.getConnection();
			String sql = "select count(*) cnt from mymember " + " where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);

			rs = pstmt.executeQuery();

			int count = 0;

			while (rs.next()) {
				count = rs.getInt("cnt");
			}

			if (count > 0) {
				chk = true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			chk = false;
		} finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}

		return chk;
	}

	@Override
	public List<MemberVO> getSearchMember(MemberVO mv) {
		
		List<MemberVO> memList = new ArrayList<>();
		try {
			conn = JDBCUtill.getConnection();
		
			String sql = "select * from mymember where 1=1"; //1=1 사용한 이유 모든 것에 and 붙여서 사용할려고
			
			//쿼리문을 동적으로 그떄그때 바꿔서 사용 => 다이나믹 쿼리
			if(mv.getMem_id()!=null && !mv.getMem_id().equals("")) {
				sql +=" and mem_id = ? ";
			}
			if(mv.getMem_name()!=null && !mv.getMem_name().equals("")) {
				sql +=" and mem_name = ? ";
			}
			if(mv.getMem_tel()!=null && !mv.getMem_tel().equals("")) {
				sql +=" and mem_tel = ? ";
			}
			if(mv.getMem_addr()!=null && !mv.getMem_addr().equals("")) {
				sql +=" and mem_addr like '%' || ? || '%' ";
			}
			
			pstmt = conn.prepareStatement(sql);
			
			int index =1;
			if(mv.getMem_id()!=null && !mv.getMem_id().equals("")) {
				pstmt.setString(index++, mv.getMem_id());
			}
			if(mv.getMem_name()!=null && !mv.getMem_name().equals("")) {
				pstmt.setString(index++, mv.getMem_name());
			}
			if(mv.getMem_tel()!=null && !mv.getMem_tel().equals("")) {
				pstmt.setString(index++, mv.getMem_tel());
			}
			if(mv.getMem_addr()!=null && !mv.getMem_addr().equals("")) {
				pstmt.setString(index++, mv.getMem_addr());
			}
			
			rs = pstmt.executeQuery();
			
			while (rs.next()) {
				MemberVO mv2 = new MemberVO();
				mv2.setMem_id(rs.getString("mem_id"));
				mv2.setMem_name(rs.getString("mem_name"));
				mv2.setMem_tel(rs.getString("mem_tel"));
				mv2.setMem_addr(rs.getString("mem_addr"));
						
				memList.add(mv2);
			}
			
			
			
			
			
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtill.disConnect(conn, stmt, pstmt, rs);
		}
		
		
		return memList;
	}

}

 

'고급 JAVA' 카테고리의 다른 글

JAVA - Log4j  (0) 2020.10.08
JAVA - Singleton  (0) 2020.10.08
JAVA - MVC 및 싱글턴패턴  (0) 2020.10.05
JAVA-JDBC - 외부 properties  (0) 2020.09.29
JAVA -JDBC - JDBC를 이용한 데이터베이스 처리 순서  (0) 2020.09.29