MVC패턴을 이용해서 지난번에 만들었던 멤버관리프로그램에 적용 시켜 보겠습니다.
1. VO패키지를 만들고 MemberVo 클래스를 작성합니다.
package kr.or.ddit.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;
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;
}
}
2. DAO 패키지를 만들고 DAO인터페이스를 작성합니다.
package kr.or.ddit.mvc.dao;
import java.util.List;
import kr.or.ddit.mvc.vo.MemberVo;
/**
* 실제 DB와 연결해서 SQL문을 실행하여 결과를 작성해서 Service에게 전달하는 DAO의 interface
*
* 메서드 하나가 DB와 관련된 작업 1개를 수행하도록 작성한다.
*
* @author MASTER
*
*/
public interface IMemberDao {
/**
* MemberVo에 담겨진 데이터를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemberVo객체
* @return 작업 성공 : 1, 작업 실패: 0
*/
public int insertMember(MemberVo memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param memId 삭제할 회원ID
* @return 작업 성공 : 1, 작업 실패: 0
*/
public int deleteMember(String memId); //매개변수가 한개가 되도록, 두개이상이면 묶어서
/**
* MemberVo의 자료를 이용하여 DB의 자료를 update하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVo객체
* @return 작업성공 : 1, 작업 실패: 0
*/
public int updateMember(MemberVo memVo);
/**
* DB의 전체 회원정보를 가져와 List에 담아서 반환하는 메서드
*
* @return MemberVo객체가 저장된 List객체
*/
public List<MemberVo> getAllMember();
/**
* 회원Id를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
* @param memId 검색할 회원ID
* @return 검색된 회원ID의 갯수
*/
public int getMemberCount(String memId);
}
3.Service 패키지를 만들고 인터페이스를 작성합니다.
package kr.or.ddit.mvc.service;
import java.util.List;
import kr.or.ddit.mvc.vo.MemberVo;
/**
* Service객체는 DAO에 설정된 메서드를 원하는 작업에 맞게 호출하여 그 결과를 받아오고,
* 받아온 결과를 Controller에게 보내주는 역할을 한다.
*
* 보통은 DAO의 메서드 구조와 같게 만든다. (자바 고급 시간에 한해서...)
* @author MASTER
*
*/
public interface IMemberService {
/**
* MemberVo에 담겨진 데이터를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemberVo객체
* @return 작업 성공 : 1, 작업 실패: 0
*/
public int insertMember(MemberVo memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param memId 삭제할 회원ID
* @return 작업 성공 : 1, 작업 실패: 0
*/
public int deleteMember(String memId); //매개변수가 한개가 되도록, 두개이상이면 묶어서
/**
* MemberVo의 자료를 이용하여 DB의 자료를 update하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVo객체
* @return 작업성공 : 1, 작업 실패: 0
*/
public int updateMember(MemberVo memVo);
/**
* DB의 전체 회원정보를 가져와 List에 담아서 반환하는 메서드
*
* @return MemberVo객체가 저장된 List객체
*/
public List<MemberVo> getAllMember();
/**
* 회원Id를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
* @param memId 검색할 회원ID
* @return 검색된 회원ID의 갯수
*/
public int getMemberCount(String memId);
}
4 DAO 패키지에 DAO클래스
package kr.or.ddit.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 kr.or.ddit.mvc.vo.MemberVo;
import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil3;
public class MemberDaoImpl implements IMemberDao {
@Override
public int insertMember(MemberVo memVo) {
Connection conn = null;
PreparedStatement pstmt = null;
int cnt = 0; // 반환값이 저장될 변수
try {
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) {
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 memId) {
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, memId);
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
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) {
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() {
List<MemberVo> memList = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtil3.getConnection();
String sql = "select * from mymember";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
memList = new ArrayList<MemberVo>();
while(rs.next()) {
// 1개의 레코드 결과를 VO객체에 담는다.
MemberVo memVo = new MemberVo();
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); // VO객체를 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 getMemberCount(String memId) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
conn =DBUtil3.getConnection();
String sql = "select count(*) cnt from mymember where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
rs = pstmt.executeQuery();
if(rs.next()) {
count = 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 count;
}
}
5. Service패키지에 Service클래스를 작성합니다.
package kr.or.ddit.mvc.service;
import java.util.List;
import kr.or.ddit.mvc.dao.IMemberDao;
import kr.or.ddit.mvc.dao.MemberDaoImpl;
import kr.or.ddit.mvc.vo.MemberVo;
public class MemberServiceImpl implements IMemberService {
private IMemberDao dao;
public MemberServiceImpl() {
dao = new MemberDaoImpl(); // DAO객체를 생성해서 dao객체변수를 초기화한다.
}
@Override
public int insertMember(MemberVo memVo) {
return dao.insertMember(memVo);
}
@Override
public int deleteMember(String memId) {
return dao.deleteMember(memId);
}
@Override
public int updateMember(MemberVo memVo) {
return dao.updateMember(memVo);
}
@Override
public List<MemberVo> getAllMember() {
return dao.getAllMember();
}
@Override
public int getMemberCount(String memId) {
return dao.getMemberCount(memId);
}
}
6. Controller 패키지를 만들고 Controller
package kr.or.ddit.mvc.controller;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.Scanner;
import kr.or.ddit.mvc.dao.MemberDaoImpl;
import kr.or.ddit.mvc.service.IMemberService;
import kr.or.ddit.mvc.service.MemberServiceImpl;
import kr.or.ddit.mvc.vo.MemberVo;
public class MemberController {
private Scanner sc;
private IMemberService service; // Service객체가 저장될 변수 선언
// 생성자
public MemberController() {
sc = new Scanner(System.in);
service = new MemberServiceImpl();
}
public static void main(String[] args) {
new MemberController().startMember();
}
//시작 메서드
public void startMember() {
System.out.println();
System.out.println("*************************************");
System.out.println("회 원 관 리 프 로 그 램");
System.out.println("*************************************");
System.out.println();
while(true) {
int choice = displayMenu();
switch(choice){
case 1 : // 자료 추가
insertMember(); break;
case 2 : // 자료 삭제
deleteMember(); break;
case 3 : // 자료 수정
updateMember(); break;
case 4 : // 전체 자료 출력
displayAllMember(); break;
case 5 : // 자료 수정2
// updateMember2(); break;
case 0 : // 프로그램 종료
System.out.println("작업을 마칩니다");
return;
default :
System.out.println("작업 번호를 잘못 입력했습니다. 다시 입력하세요...");
}
}
}
private void displayAllMember() {
System.out.println();
System.out.println("-----------------------------------------------------------");
System.out.println(" 회원ID 비밀번호 회원이름 전화번호 회원주소");
System.out.println("-----------------------------------------------------------");
List<MemberVo> list = service.getAllMember();
// for(int i = 0; i < list.size(); i++ ) {
// String id = list.get(i).getMem_id(); //memVo.getMem_id();
// String pass = list.get(i).getMem_pass();
// String name = list.get(i).getMem_name();
// String tel = list.get(i).getMem_tel();
// String addr = list.get(i).getMem_addr();
//
// System.out.println(id + "\t" + pass + "\t" + name + "\t" + tel + "\t" + addr);
// 이중포문 사용
if(list ==null || list.size() ==0) {
System.out.println("정보가 하나도 없습니다.");
}else {
for(MemberVo memVo : list) {
System.out.println(memVo.getMem_id() + "\t"
+ memVo.getMem_pass() + "\t"
+ memVo.getMem_name() + "\t"
+ memVo.getMem_tel() + "\t"
+ memVo.getMem_addr() + "\t");
}
}
}
private void updateMember() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요...");
System.out.print("회원ID >> ");
String id = sc.next();
int count = service.getMemberCount(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();
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("수정 작업 성공!!!");
}else {
System.out.println("수정 작업 실패~~~");
}
}
private void deleteMember() {
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요...");
System.out.print("회원ID >> ");
String id = sc.next();
MemberVo memVo = new MemberVo();
memVo.setMem_id(id);
int cnt = service.deleteMember(id);
if(cnt>0) {
System.out.println("회원ID가 " + id + "인 회원 정보 삭제 성공!!");
}else {
System.out.println("회원ID가 " + id + "인 회원은 없는 회원이거나 삭제에 실패했습니다...");
}
}
private void insertMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("추가할 회원 정보를 입력하세요...");
int count = 0; // 회원ID의 개수가 저장될 변수
String id = null; // 입력한 회원ID가 저장될 변수
do {
System.out.print("회원ID >> ");
id = sc.next();
count = service.getMemberCount(id);
if(count>0) {
System.out.println("입력한 " + id + "은(는) 이미 등록된 회원ID입니다.");
System.out.println("다른 회원ID를 입력하세요...");
System.out.println();
}
}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();
// 입력한 데이터들을 VO객체에 담는다.
MemberVo memVo = new MemberVo();
memVo.setMem_id(id);
memVo.setMem_pass(pass);
memVo.setMem_name(name);
memVo.setMem_tel(tel);
memVo.setMem_addr(addr);
int cnt = service.insertMember(memVo);
if(cnt > 0) {
System.out.println("등록 작업 성공 ! ! ! ");
}else {
System.out.println("등록 작업 실패 ~ ~ ~");
}
}
// 메뉴를 출력하고 작업번호를 입력 받아 반화하는 메서드
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();
}
}
고급 자바_0117-1 (0) | 2023.01.17 |
---|---|
고급 자바_0110-1 (1) | 2023.01.11 |
고급 자바_0109-1 (0) | 2023.01.09 |
고급 자바_0106-1 (0) | 2023.01.06 |
고급 자바_0105-1 (0) | 2023.01.05 |