package com.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MemberDto {
private String uid;
private String upass;
private String uname;
private int uage;
private String uaddr;
@Override
public String toString(){
return "ID : " + uid + "\n"
+ "NAME : " + uname + "\n"
+ "AGE : " + uage + "\n"
+ "ADDRESS : " + uaddr;
}
}
package com.dao;
import com.dto.MemberDto;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MemberDao {
// DB 연동에 필요한 정보
private String drv = "com.mysql.cj.jdbc.Drive";
private String url = "jdbc:mysql://127.0.0.1:3306/jdbc_db";
private String dbuser = "dbuser";
private String dbpass = "비밀번호";
// DB 연동관련 객체
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
// Driver 로드 -> 생성자로 처리
public MemberDao() {
try {
Class.forName(drv);
} catch (ClassNotFoundException e) {
}
} // 생성자 끝
// 메모리 해제용 메소드
public void close() {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {}
}
// 입력용 메소드
public void insertMember(MemberDto member) throws SQLException {
// SQL 쿼리문 작성
String query = "INSERT INTO membertb VALUES (?, ?, ?, ?, ?)";
conn = DriverManager.getConnection(url, dbuser, dbpass);
pstmt = conn.prepareStatement(query);
// query의 ? 부분 채우기
pstmt.setString(1, member.getUid());
pstmt.setString(2, member.getUpass());
pstmt.setString(3, member.getUname());
pstmt.setInt(4, member.getUage());
pstmt.setString(5, member.getUaddr());
// 왼성된 query문 실행
// insert, update, delete 실행은 executeUpdate()를 사용한다.
pstmt.executeUpdate();
}
// 출력용 메소드
public List<MemberDto> getList() throws SQLException{
List<MemberDto> mList = null;
// 쿼리문 만들기
String query = "SELECT * FROM membertb";
conn = DriverManager.getConnection(url, dbuser, dbpass);
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
// 배열에서 한 행씩 꺼내기
while (rs.next()){
if(mList == null){
// list가 없으면 list 만들어서 사용, 처음 한번만 만들기
mList = new ArrayList<>();
}
// 한 행을 담을 수 있는 공간(Dto) 생성
MemberDto md = new MemberDto();
md.setUid(rs.getString("uid"));
md.setUname(rs.getString(3));
md.setUage(rs.getInt(4));
md.setUaddr(rs.getString(5));
// dto -> list
mList.add(md);
}
return mList; // null 이거나 목록이거나
}
// 검색용 메소드
public MemberDto selectMember(String id) throws SQLException {
MemberDto member = null;
String query = "SELECT * FROM membertb WHERE uid = ?";
conn = DriverManager.getConnection(url, dbuser, dbpass);
pstmt = conn.prepareStatement(query);
pstmt.setString(1, id); // public MemberDto selectMember(String id)
rs = pstmt.executeQuery();
// 정보가 있거나 없거나 확인, if문 사용
if(rs.next()){
member = new MemberDto();
member.setUid(rs.getString(1));
member.setUname(rs.getString(3));
member.setUage(rs.getInt(4));
member.setUaddr(rs.getString(5));
} // 값이 없는 경우 false 처리 null이 넘어간다.
return member; // null 이거나 member.dto이거나(한명의 정보)
}
} // class end
package com.controller;
import com.dto.MemberDto;
import com.service.MemberService;
import com.view.MemberView;
import java.util.List;
public class MemberController {
// 화면 처리용 객체
private MemberView mView = new MemberView();
// 서비스 객체
private MemberService mServ = new MemberService();
// 프로그램 전체 제어용 메소드
public void run() {
// 메뉴 번호 저장 변수
int m = -1;
// 타이틀 출력(view 클래스 메소드 사용)
mView.viewTitle("회원 관리 프로그램");
while (true) { //종료 명령 전까지 무한 반복
// 메뉴 출력과 메뉴 번호 입력 - view 메소드
m = mView.showMenu(1); // 번호 입력 시 메인메뉴와 서브 메뉴 출력
// 종료 처리(사용자가 0을 입력)
if (m == 0) {
// 종료 메세지 출력(view 메소드)
mView.prMsg("프로그램 종료");
// 메소드 종료
return;
}
// 나머지 메뉴 처리
switch (m) {
case 1:// 회원 정보 입력
inputMember();
break;
case 2:// 회원 정보 출력
outputMember();
break;
case 3: // 회원 정보 검색
searchMember();
break;
default:
mView.prMsg("0~3번을 입력하세요.");
}
}
}
// 검색
private void searchMember() {
// 서브 타이틀 출력
mView.viewTitle("회원 정보 출력");
// 검색 키워드 입력 받기 WHERE uid = 'hong';
String searchId = mView.getSearch("ID : ");
// 서비스에 검색 키워드 넘기고 결과 받기
MemberDto member = mServ.getMember(searchId);
// view로 검색 결과 출력
if(member != null){
mView.outputMember(member);
} else {
mView.prMsg("검색할 회원이 없습니다.");
}
}
//출력
private void outputMember() {
// 서브 타이틀 출력
mView.viewTitle("회원 정보 출력");
// 서비스로부터 회원 목록 받기(List)
List<MemberDto> mList = mServ.getList();
// 회원 목록을 view로 출력
if (mList != null) {
mView.outputList(mList);
} else {
mView.prMsg("저장된 회원이 없습니다.");
}
}
// 입력
private void inputMember() {
// 서브 타이틀 출력
mView.viewTitle("회원 정보 입력");
// 회원정보 저장 객체 생성
MemberDto member = new MemberDto();
// 회원 정보 입력 view 메소드
mView.inputMember(member);
// 서비스에 회원정보 전달 및 결과 받기
String msg = mServ.inputMember(member);
// 결과 출력 view 메소드
mView.prMsg(msg);
}
} // class end
package com.view;
import com.dto.MemberDto;
import java.util.List;
public class MemberView {
// 모니터 출력 및 키보드 입력 처리 메소드
InOutClass ioc = new InOutClass();
// 타이틀 출력 메소드
public void viewTitle(String title) {
ioc.tlPrint("------------------------");
ioc.tlPrint("<< " + title + " >>");
ioc.tlPrint("------------------------");
}
// 메뉴 출력 메소드(메인 메뉴, 서브 메뉴 모두 처리)
public int showMenu(int cNum) {
//cNum에 들어오는 값에 따라 메인과 서브 선택 출력
int menu = -1; // 메뉴 번호 저장 변수
ioc.tlPrint("");// 메뉴 출력 전 한줄 띄어주기
ioc.tlPrint("메뉴>");
switch (cNum) {
case 1:// 메인 메뉴 출력
ioc.tlPrint("1. 회원 정보 입력");
ioc.tlPrint("2. 회원 정보 출력(전체)");
ioc.tlPrint("3. 회원 정보 검색");
ioc.tlPrint("0. 프로그램 종료");
break;
case 2:// 검색 후 서브 메뉴 출력
ioc.tlPrint("회원 정보 수정");
ioc.tlPrint("회원 정보 삭제");
break;
}
// 메뉴 번호 입력 받기
menu = ioc.intNum("선택> ");
return menu; // 입력 받은 메뉴 번호를 컨트롤러로 전달
}
// 메세지 출력용 메소드
public void prMsg(String msg) {
ioc.tlPrint(msg);
}
public void inputMember(MemberDto member) {
member.setUid(ioc.inStr("ID : "));
member.setUpass(ioc.inStr("PASSWORD : "));
member.setUname(ioc.inStr("NAME : "));
member.setUage(ioc.intNum("AGE : "));
member.setUaddr(ioc.inStr("ADDRESS : "));
}
public void outputList(List<MemberDto> mList) {
for (MemberDto m : mList) {
ioc.tlPrint(m.toString());
ioc.tlPrint("=========================");
}
}
public String getSearch(String s) {
String keyword = ioc.inStr(s);
ioc.tlPrint("▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼");
return keyword;
}
public void outputMember(MemberDto member) {
ioc.tlPrint(member.toString());
ioc.tlPrint("▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲");
}
} // class end
package com.service;
import com.dao.MemberDao;
import com.dto.MemberDto;
import java.sql.SQLException;
import java.util.List;
public class MemberService {
// Dao 객체
private MemberDao mDao = new MemberDao();
// 회원 정보 저장 메소드
public String inputMember(MemberDto member) {
// DB 처리 결과 메세지 저장 변수
String msg = null;
// Dao의 insert 메소드를 사용해서 정보를 저장
try {
mDao.insertMember(member);
msg = "저장 성공";
} catch (SQLException e) {
msg = "저장 실패";
} finally {
mDao.close();
}
return msg;
}
public List<MemberDto> getList() {
//Dao의 테이블 내용을 받아오는 메소드 실행
List<MemberDto> mList = null;
try {
mList = mDao.getList();
} catch (SQLException e) {}
finally {
mDao.close();
}
return mList;
}
public MemberDto getMember(String searchId) {
MemberDto member = null;
try {
member = mDao.selectMember(searchId);
} catch (SQLException e) {}
finally {
mDao.close();
}
return member;
}
} // class end