ddit/Java

MVC패턴(model-view-controller)< VO,DAO,Service,Controller>

ssong2ku 2022. 7. 26. 20:35
728x90

▶MVC(Model, View, Controller)
- Model : DB처리를 위한 data(좁은의미),

              data를 구성하기 위한 프로그램까지 포함/Service, DAO 포함(넓은의미)

 =>model2, model1은 존재하지 않으며, MVC패턴 이전의 방법을 지칭


- View : model을 사용자가 원하는 모습으로 보여줌 ,출력 또는 응답페이지.


- Controller : Model과 View 사이에 있는 컴포넌트. Model이 데이터를 어떻게 처리할지 알려주는 역할로 사용자의 요청을 받아서 처리하는 부분.

MVC패턴의 로직을 처리하는 클래스들
VO, DTO ==> 데이터를 저장하는 역할만 하는 클래스
- VO : Value Object :데이터를 저장하고 사용할 수 있게함.
- DTO : Data Transfer Object : 컨트롤러가 일을 받아서 시킬 때, 필요한 정보를 담아서 넘겨줌

==> 보통 DB테이블에서 1개의 레코드를 저장할 클래스를 지칭.  따로 구분없이 쓰이는 듯함.


- DAO ==> SQL문을 DB서버에 보내서 결과를 얻어오는 역할을 수행하는 클래스
(DAO : Data Access Object)

- Service ==>일을 수행하는 중간 관리자와 같은 역할을 수행하는 클래스(안쓰는 곳도 있음)
Service는 일( 1. 일반 비즈니스 로직 - DB접근이 필요없는 일반처리
  2. DB를 필요로 하는 처리)이 있으면 그 일에 필요한 DAO를 호출해서 일을 처리한 후
처리결과를 Controller에게 전달.

Controller ==> 비지니스 로직이 시작되는 곳으로 사용자의 요청에 맞는 일을 
Service에게 시키고, Service가 보내온 처리결과를 화면 등에 
반영시키는 역할 수행.

Controller --> Service --> DAO --> DB서버 <요청순선>
<--Controller <--Service <--DAO <--DB서버<반환순서>
각 단계에서 전달되는 데이터는 VO나 Collection객체에 담아서 보냄
a-->b : a가 b메소드 호출(매개변수에 담아서 전달)
<-- : 반환값을 전달


예제)

1. 자바프로젝트 생성 후 소스폴더 추가하기

2. 소스폴더에 config 프로젝트 생성

 2-1. config에 JDBC에 필요한 정보가 들어 있는 text파일생성

#dbinfo.properties

# 이 줄은 주석 처리 줄입니다...
# Properties문서를 작성하는 방법
# 'key값 = value값' 같은 형식으로 작성
# 공백주의하기

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=ddit
pass=java

 2-2. .DBUtil 프로젝트 및 클래스 생성

package kr.or.ddit.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

//dbinfo.properties 파일의 내용을 이용하여 셋팅하는 방법

//방법1) Properties객체 이용

public class DBUtil2 {
	
	static Properties prop; //Properties객체 변수 선언
	
	//static초기화블럭 
	static{
		prop= new Properties(); //Properties객체 생성
		File f = new File("res/kr/or/ddit/config/dbinfo.properties");
		FileInputStream fin = null;
		
		try {
			
			fin = new FileInputStream(f); //입력스트림 객체생성
			
			prop.load(fin); //파일을 읽어서 Properties객체에 추가
			
			//Class.forName("oracle.jdbc.driver.OracleDriver");
			
			Class.forName(prop.getProperty("driver"));
			
		} catch (IOException e) {
			System.out.println("입출력오류...");
			System.out.println("드라이버 로딩 실패.");
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패~~~");
			e.printStackTrace();
		}finally {
			if(fin!=null) try {fin.close();} catch (IOException e) {}
		}
		
	}
	
	//DB에 접속하고 접속이 성공하면 Connection객체를 반환
	public static Connection getConnection() {
		try {
			//return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","ddit","java");
			return DriverManager.getConnection(
					prop.getProperty("url"),
					prop.getProperty("user"),
					prop.getProperty("pass")
					);
			
			
		} catch (SQLException e) {
			System.out.println("DB 연결 실패~~");
			return null;
		}
	}
	
}

3. vo프로젝트 및 클래스 만들기

package kr.or.mvc.vo;

/*
 * DB테이블에 있는 컬럼을 기준으로 데이터를 객체화할 클래스
 * 
 * DB테이블의 '컬럼명'이 이 클래스의 '멤버변수'
 * DB테이블의 컬럼과 클래스의 멤버변수를 매핑하는 역할 수행
 * 
 *  
 */


public class MemberVO {
	private String	mem_id ;
	private String	mem_pass;
	private String	mem_name;
	private String	mem_tel;
	private String	mem_addr;
	
	
	
	//VO클래스에서 별도의 생성자를 만들때에는 기본 생성자도 반드시 같이 만들어 줌.
	//별도의 생성자가 없다면 컴파일러가 자동으로 기본생성자를 만들어줌.
	
	//getter, setter
	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_pass() {
		return mem_pass;
	}
	public void setMem_pass(String mem_pass) {
		this.mem_pass = mem_pass;
	}
	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;
	}

	
}

4.dao프로젝트 및 클래스만들기

4-1.dao interface에 추상메서드로 작성

-인터페이스로 작성하는 이유?

비즈니스 로직을 처리하는 모델은 요청사항에 따라 언제든 변할수있는 부분으로

변화에 대응하기위해 확장을 염두하여 인터페이스로 구성

package kr.or.mvc.dao;

import java.util.List;
import java.util.Map;

import kr.or.mvc.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 작성해서 Service에게 전달하는 DAO의 interface
 * 
 * 각 메서드 하나가 DB와 관련된 직업 1개를 수행하도록 작성
 * 
 * 
 * 
 * @author PC-06
 *
 */



public interface IMemberDao {
	/**
	 * MemberVO에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
	 * @return insert성공 : 1, insert 실패 : 0
	 */
	
	public int insertMember(MemberVO memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param id 삭제할 회원ID
	 * @return 삭제성공 : 1, 삭제실패 : 0
	 */
	
	public int deleteMember(String id);

	/**
	 * MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVO객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	
	public int updateMember(MemberVO memVo);	

	/**
	 * 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
	 * 
	 * 
	 * @return MemberVO객체가 저장된 List객체
	 * 
	 * 
	 */
	
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * 
	 * @param id 검색할 회원ID
	 * @return 검색된 회원ID의 개수
	 */
	
	public int getMemberIdCount(String id);
	
	//public int updateMember2(String field, String data, String id); 
	//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
	/**
	 * Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
	 * 	==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
	 * 
	 * @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	public int updateMember2(Map<String, String> paraMap);
	
	
	


}

4-2. daoImpl class에 구체적으로 구현

package kr.or.mvc.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 java.util.Map;

import kr.or.ddit.util.DBUtil3;
import kr.or.mvc.vo.MemberVO;

public class MemberDaoImpl implements IMemberDao{
	
	//1번
	private static MemberDaoImpl dao;
	
	//2번
	private MemberDaoImpl() {}
	
	//3번
	public static MemberDaoImpl getInstance() {
		if(dao==null) dao = new MemberDaoImpl();
		
		return dao;
	}

	@Override
	public int insertMember(MemberVO memVo) {
		Connection conn=null;
		PreparedStatement pstmt=null;
		int cnt=0; //반환값이 저장될 변수 선언
		
		try {
			//DB에 insert
			conn = DBUtil3.getConnection();
			
			String sql = "insert into mymember"
					+"(mem_id, mem_pass, mem_name, mem_tel, mem_addr)"
					+" values(?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_id());
			pstmt.setString(2, memVo.getMem_pass());
			pstmt.setString(3, memVo.getMem_name());
			pstmt.setString(4, memVo.getMem_tel());
			pstmt.setString(5, memVo.getMem_addr());
			
			cnt = pstmt.executeUpdate();
			
			
		} catch (SQLException e) {
			cnt=0;
			e.printStackTrace();
		}finally {
			if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
			if(conn!=null)try {conn.close();}catch(SQLException e) {};
		}
		
		return cnt;
	}

	@Override
	public int deleteMember(String id) {
		Connection conn=null;
		PreparedStatement pstmt=null;
		
		int cnt=0; //반환값이 저장될 변수 선언
		
		
		try {
			conn = DBUtil3.getConnection();
			
			String sql = "delete from mymember where mem_id=?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			cnt=0;
			e.printStackTrace();
			
		}finally {
			if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
			if(conn!=null)try {conn.close();}catch(SQLException e) {};
			
		}
		return cnt;
	}

	@Override
	public int updateMember(MemberVO memVo) {
		Connection conn=null;
		PreparedStatement pstmt=null;
		
		int cnt=0; 
		
		
		try {
			conn = DBUtil3.getConnection();
			
			String sql = "update mymember set "
					+" mem_pass = ? , mem_name = ? , mem_tel = ?, mem_addr = ? where mem_id = ?" ;
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_pass());
			pstmt.setString(2, memVo.getMem_name());
			pstmt.setString(3, memVo.getMem_tel());
			pstmt.setString(4, memVo.getMem_addr());
			pstmt.setString(5, memVo.getMem_id());
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			cnt=0;
			e.printStackTrace();
			
		}finally {
			if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
			if(conn!=null)try {conn.close();}catch(SQLException e) {};
			
		}
		return cnt;
	}

	@Override
	public List<MemberVO> getAllMember() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		List<MemberVO> memList = null; //반환값이 저장될 변수선언
		
		try {
			conn = DBUtil3.getConnection();
			String sql = "select * from mymember";
			stmt = conn.createStatement();
			rs=stmt.executeQuery(sql);
			
			memList = new ArrayList<MemberVO>(); //List객체 생성
			while(rs.next()) {//레코드 개수만큼 반복
				MemberVO memVo = new MemberVO(); //1개의 레코드가 저장될 변수 선언
				
				//VO객체에 DB에서 가져온 컬럼값들을 저장한다.
				memVo.setMem_id(rs.getString("mem_id"));
				memVo.setMem_pass(rs.getString("mem_pass"));
				memVo.setMem_name(rs.getString("mem_name"));
				memVo.setMem_tel(rs.getString("mem_tel"));
				memVo.setMem_addr(rs.getString("mem_addr"));
				
				memList.add(memVo); //1개의 레코드가 저장된 MemberVO객체를 List에 추가
			}
		} catch (SQLException e) {
			memList = null;
			e.printStackTrace();
		}finally {
		if(rs!=null)try {rs.close();}catch(SQLException e) {};
		if(stmt!=null)try {stmt.close();}catch(SQLException e) {};
		if(conn!=null)try {conn.close();}catch(SQLException e) {};
		}
		return memList;
	}
	@Override
	public int getMemberIdCount(String id) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		int cnt=0;
		
		try {
			conn = DBUtil3.getConnection();
			
			String sql ="select count(*) cnt from mymember "
					+"where mem_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				cnt = rs.getInt("cnt");
			}
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			if(rs!=null)try {rs.close();}catch(SQLException e) {};
			if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
			if(conn!=null)try {conn.close();}catch(SQLException e) {};
		}
		return cnt;
	
	}

	@Override
	public int updateMember2(Map<String, String> paraMap) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt =0;
		
		
		//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
		
		try {
			conn=DBUtil3.getConnection();
			
			
			//paraMap에 저장된 key값을 이용하여 쿼리문을 작성하고
			//쿼리문에 들어갈 데이터를 셋팅하는 작업진행
			String sql = "update mymember set "+paraMap.get("field")+ " =? where mem_id=? ";
			
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, paraMap.get("data"));
			pstmt.setString(2, paraMap.get("memid"));
			
			cnt = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			cnt = 0;
			e.printStackTrace();
		}
		
		return cnt;
	}
	
	

}

5. service 프로젝트 및 class생성

->dao에서 가져와서 필요한 형식으로 바꾸기

5-1 . service interface 생성

package kr.or.mvc.service;

import java.util.List;
import java.util.Map;

import kr.or.mvc.vo.MemberVO;

/**
 * Service객체는 DAO에 만들어진 메서들르 원하는 작업에 맞게 호출하여 실행하고 그 결과를 받아오고, 
 * 받아온 결과를 Controller에게 보내주는 역할
 * 그래서 보통 DAO의 메서드 구조와 같게 만듦.(자바고급단계에서는...스프링, JSP등에서는 달라짐.)
 * 
 * 
 * 
 * 
 * @author PC-06
 *
 */

public interface IMemberService {
	
	/**
	 * MemberVO에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
	 * @return insert성공 : 1, insert 실패 : 0
	 */
	
	public int insertMember(MemberVO memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param id 삭제할 회원ID
	 * @return 삭제성공 : 1, 삭제실패 : 0
	 */
	
	public int deleteMember(String id);

	/**
	 * MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVO객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	
	public int updateMember(MemberVO memVo);	

	/**
	 * 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
	 * 
	 * 
	 * @return MemberVO객체가 저장된 List객체
	 * 
	 * 
	 */
	
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * 
	 * @param id 검색할 회원ID
	 * @return 검색된 회원ID의 개수
	 */
	
	public int getMemberIdCount(String id);

	//public int updateMember2(String field, String data, String id); 
	//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
	/**
	 * Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
	 * 	==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
	 * 
	 * @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
	 * @return 수정성공 : 1, 수정실패 : 0
	 */
	public int updateMember2(Map<String, String> paraMap);
	
	
	
	
}

5-2. serviceImpl class생성

package kr.or.mvc.service;

import java.util.List;
import java.util.Map;

import kr.or.mvc.dao.IMemberDao;
import kr.or.mvc.dao.MemberDaoImpl;
import kr.or.mvc.vo.MemberVO;

public class MemberServiceImpl implements IMemberService {
	private IMemberDao dao; // DAO객체가 저장될 변수 선언

	private static MemberServiceImpl service;   //1번
	   
	   
	   //생성자
	   //public MemberServiceImpl () {
	   private MemberServiceImpl () {            //2번
	      //dao = new MemberDaoImpl();   //DAO객체 생성
	      dao = MemberDaoImpl.getInstance();
	   }
	   
	   public static MemberServiceImpl getInstance() {
	      if(service == null) service = new MemberServiceImpl();
	      
	      return service;
	   }



	@Override
	public int insertMember(MemberVO memVo) {
		return dao.insertMember(memVo);
	}

	@Override
	public int deleteMember(String id) {
		return dao.deleteMember(id);
	}

	@Override
	public int updateMember(MemberVO memVo) {
		return dao.updateMember(memVo);
	}

	@Override
	public List<MemberVO> getAllMember() {
		return dao.getAllMember();
	}

	@Override
	public int getMemberIdCount(String id) {
		return dao.getMemberIdCount(id);
	}

	@Override
	public int updateMember2(Map<String, String> paraMap) {
		// TODO Auto-generated method stub
		return dao.updateMember2(paraMap);
	}

}

6.controller 프로젝트 및 class생성

package kr.or.mvc.controller;

import java.security.Provider.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import kr.or.ddit.util.DBUtil;
import kr.or.mvc.service.IMemberService;
import kr.or.mvc.service.MemberServiceImpl;
import kr.or.mvc.vo.MemberVO;

public class MemberController {

	
	   private IMemberService service; // Service객체가 저장될 변수 선언
	   
	   private Scanner sc =  new Scanner(System.in);
	   
	   
	   
	   
	   public MemberController() {
	   //service = new MemberServiceImpl();
		   service = MemberServiceImpl.getInstance();
	}


	   public static void main(String[] args) {
	      new MemberController().memberStart();

	   }
 
	private void memberStart() {
	      
	      
	      
	      while(true) {
	          int choice = displayMenu();         
	      switch(choice) {
	      
	      case 1 :         // 추가
	          insertMember();   
	         break;
	         
	      case 2 :         // 삭제
	        deleteMember();
	         break;
	      case 3 :         // 수정
	         updateMember();
	         break;
	         
	      case 4 :         // 전체출력
	         displayMember();
	         break;
	      
	      case 5 :         // 수정2
	         updateMember2();
	         break;
	         
	      case 0 : 
	         System.out.println("프로그램을 종료합니다...");
	         return;
	      default :
	         System.out.println("작업 번호를 잘못 입력했습니다.");
	         System.out.println("다시 입력하세요.");
	                  
	      }
	      }
	   }
	
	private void  updateMember2() {
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요.");
		
		System.out.println("회원ID>> ");
		String id = sc.next();
		
		int count = service.getMemberIdCount(id);
		
		if(count==0) {//없는 회원...
			System.out.println(id+"은(는) 없는 회원ID입니다.");
			System.out.println("수정 작업을 종료합니다.");
			return;
		}	
		int num;
		
		String field = null; //수정항목의 컬럼명이 저장
		String title = null;//수정항목을 입력 받을 때 사용할 메세지(항목명)
		
		do {
			System.out.println();
			System.out.println("수정할 항목을 선택하세요.");
			System.out.println("---------------------------------------");
			System.out.println("1. 비밀번호 2. 회원이름 3. 전화번호 4. 회원주소");
			System.out.println("---------------------------------------");
			System.out.println("수정할 항목 선택>> ");
			
			num=sc.nextInt();
			
			
			switch(num) {
			case 1: 
				field = "mem_pass"; title ="비밀번호";
				break;
			case 2: 
				field = "mem_name"; title ="회원이름";
				break;
			case 3: 
				field = "mem_tel"; title ="전화번호";
				break;
			case 4: 
				field = "mem_addr"; title ="회원주소";
				break;
			default :
				System.out.println("수정할 항목 번호를 잘못입력했습니다.");
				System.out.println("다시 선택해주세요.");
				break;
			}
			
		}while(num<1||num>4);
		
		System.out.println();
		
		sc.nextLine();//입력버퍼 비우기
		System.out.println("새로운"+title+">>");
		String data = sc.nextLine();
		
		//선택한 컬럼명과 수정할 데이터 그리고 회원ID를 Map에 추가한다.
		//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
			Map<String, String> paraMap = new HashMap<String,String>();
			paraMap.put("memid", id);
			paraMap.put("field", field);
			paraMap.put("data", data);
			
			int cnt = service.updateMember2(paraMap);
			
			if(cnt>0) {
				System.out.println(" 수정 완료!!!");
			}else {
				System.out.println(" 수정 실패ㅜㅜ");
			}
		
	}
	
	private void  updateMember() {
		System.out.println();
		System.out.println("수정할 회원 정보를 입력하세요.");
		
		System.out.println("회원ID>> ");
		String id = sc.next();
		
		int count = service.getMemberIdCount(id);
		
		if(count==0) {//없는 회원...
			System.out.println(id+"은(는) 없는 회원ID입니다.");
			System.out.println("수정 작업을 종료합니다.");
			return;
		}
		
		System.out.println();
		System.out.print("새로운 비밀번호>> ");
		String newPass = sc.next();
		
		System.out.print("새로운 회원이름>> ");
		String newName = sc.next();
		
		System.out.print("새로운 전화번호>> ");
		String newTel = sc.next();
		
		sc.nextLine();
		
		System.out.print("새로운 주소>> ");
		String newAddr = sc.nextLine();
		
		//입력한 자료를 VO객체에 담는다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(id);
		memVo.setMem_pass(newPass);
		memVo.setMem_name(newName);
		memVo.setMem_tel(newTel);
		memVo.setMem_addr(newAddr);
		
		int cnt = service.updateMember(memVo);		
		if(cnt>0) {
			System.out.println(id+"회원 정보 수정 완료!!!");
		}else {
			System.out.println(id+"회원 정보 수정 실패ㅜㅜ");
		}
		
	}
	

	private void deleteMember() {
		System.out.println();
		System.out.println("삭제할 회원 정보를 입력하세요.");
		System.out.println("회원ID>> ");
		String id = sc.next();
		
		int cnt = service.deleteMember(id);
		
		if(cnt>0) {
			System.out.println(id+"회원 정보 삭제 성공!!!");
		}else {
			System.out.println(id+"회원은 없는 회원이거나 삭제에 실패하였습니다....ㅠㅠ");
		}
	}
	
	
	private void displayMember() {
		 
		List<MemberVO>memList= service.getAllMember();
		System.out.println();
	    System.out.println("-----------------------------------------------");
	    System.out.println(" ID   PASSWORD   이 름       전화번호        주  소");
	    System.out.println("-----------------------------------------------");
	    if(memList==null||memList.size()==0) {
	    	System.out.println("등록된 회원이 하나도 없습니다.");
	    }else {
	    	for(MemberVO memVo : memList) {
	    		String id = memVo.getMem_id();
	    		String pass = memVo.getMem_pass();
	    		String name = memVo.getMem_name();
	    		String tel = memVo.getMem_tel();
	    		String addr = memVo.getMem_addr();
	    		
	    		System.out.println(id+"\t"+pass+"\t"+name+"\t"+tel+"\t"+addr);
	    	}
	    }
	    System.out.println("-----------------------------------------------");
	    System.out.println("출력 끝...");
	     
	     
	}
	   
	   
	private void insertMember() {
	   System.out.println();
	   System.out.println("추가할 회원 정보를 입력하세요.");

	   int count = 0;
	   String memId = null;
	   
	   do {
	      System.out.print("회원ID >> ");
	      memId = sc.next();
	      
	      count = service.getMemberIdCount(memId);
	      
	      if(count>0) {
	         System.out.println(memId + "은(는) 이미 등록된 회원ID 입니다.");
	         System.out.println("다른 회원ID를 입력하세요.");
	         
	      }
	      
	   }while(count>0);
	   System.out.print("비밀번호 >> ");
	   String pass = sc.next();
	   
	   System.out.print("회원이름 >> ");
	   String name = sc.next();
	   
	   System.out.print("전화번호 >> ");
	   String tel = sc.next();
	   
	   sc.nextLine(); // 입력버퍼 비우기
	   System.out.print("회원주소 >> ");
	   String addr = sc.nextLine();
	   
	    // 입력한 데이터를 MemberVO객체에 저장한다.
	   MemberVO memVo = new MemberVO();
	   
	   memVo.setMem_id(memId);
	   memVo.setMem_pass(pass);
	   memVo.setMem_name(name);
	   memVo.setMem_tel(tel);
	   memVo.setMem_addr(addr);
	   
	   //Service의 insert메서드 호출
	   int cnt = service.insertMember(memVo);
	   
	   if(cnt>0 ) {
	      System.out.println(memId + " 회원 정보 추가 완료!!!");
	   }else {
	      System.out.println(memId + " 회원 정보 추가 실패~~~");
	      
	   }
	}

	  private int displayMenu() {
	      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. 자 료 수 정2 ");
	      System.out.println("   0. 작 업 끝");
	      System.out.println("------------------");
	      System.out.print(" 원하는 작업 선택 >> ");
	      return sc.nextInt();
	      
	      
	}

	}
728x90

'ddit > Java' 카테고리의 다른 글

ibatis  (0) 2022.07.29
싱글톤패턴(Singleton)  (0) 2022.07.27
Stack, Queue, Sort  (0) 2022.06.22
Collection Framework(Array List, Vector...), generic / 문제풀기  (0) 2022.06.22
객체지향개념을 이해하기 위한 게임만들기  (0) 2022.06.10