# 26. Java 25일차(230919) [국비교육]

brand_mins·2023년 9월 19일

Java

목록 보기
25/47

1. MVC Model2 인터페이스 이용

  • MethodView가 삭제되고 ViewInterface 생성
  • MethodView 대신에 view 클래스를 인터페이스에 상속하여 execute 메소드 실행상태 개선
import com.human.model.Model;

public interface IConsoleView {
	public void execute(Model model);
}

import java.util.ArrayList;

import com.human.dto.HumanDto;
import com.human.model.Model;

public class SelectResultView implements IConsoleView {
	@Override
	public void execute(Model model) {
		System.out.println("-------------------------------------");
		for (HumanDto dto : (ArrayList<HumanDto>)model.getAttribute("resultDtos")) {
			System.out.println(dto);
		}
	}

}

import com.human.dto.HumanDto;
import com.human.model.Model;
import com.human.util.UserInput;

public class InsertInputView implements IConsoleView {
	public void execute(Model model) {
		System.out.println("------------------------------------------");
		HumanDto dto = new HumanDto();
		dto.setName(UserInput.inputString("이름 입력"));
		dto.setAge(UserInput.inputInt("나이 입력"));
		dto.setHeight(UserInput.inputDouble("키 입력"));
		dto.setBirthday(UserInput.inputLocalDateTime("생일 입력"));
		
	}

}

import com.human.model.Model;
import com.human.util.UserInput;

public class DeleteInputView implements IConsoleView {
	@Override
	public void execute(Model model) {
		System.out.println("---------------------------------------------");
			System.out.println("삭제할 데이터 입력");
			String name = UserInput.inputString("이름 입력");
			model.setAttribute("name", name);
		}

}

import com.human.model.Model;
import com.human.util.UserInput;

public class UpdateInputView implements IConsoleView {
	@Override
	public void execute(Model model) {
		System.out.println("-------------------------------------------------");
		String updateName = UserInput.inputString("수정할 이름 입력");
		int updateAge = UserInput.inputInt("수정할 나이 입력");
		model.setAttribute("updateName", updateName);
		model.setAttribute("updateAge", updateAge);
	}

}

import com.human.model.Model;

public class EXITOutputView implements IConsoleView {
	@Override
	public void execute(Model model) {
		System.out.println("-----------------------------------------");
			System.out.println("프로그램을 종료합니다.");
			model.setAttribute("input", 5);
	}

}

import com.human.model.Model;

public class ErrorOutputView implements IConsoleView {
	@Override
	public void execute(Model model) {
		System.out.println("보기에 있는 숫자를 입력하세요");
	}

}

import com.human.model.Model;
import com.human.util.UserInput;

public class MainMenuView implements IConsoleView {
	@Override
	public void execute(Model model) {
		String strMainMenu =  "-HumanTable 관리프로그램------------------------\n";
		strMainMenu += "| 1.출력 | 2.입력 | 3.삭제 | 4.수정 | 5.종료 |\n" ; 
		strMainMenu += "메뉴 번호 ";
		model.setAttribute("input", UserInput.inputInt(strMainMenu));
	}

}

2. 실습 및 프로젝트 연습

(1) customer 실습

1. CustomerDao
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

import com.human.dto.CustomerDto;
import com.human.util.DBConn;

public class CustomerDao {
	public ArrayList<CustomerDto> select() {
		ArrayList<CustomerDto> resultDtos=new ArrayList<CustomerDto>();
		ResultSet rs=DBConn.statementQuery(String.format("select * from customer"));
		try {
			while(rs.next()) {
				resultDtos.add(new
						CustomerDto(rs.getInt("id"), rs.getString("name"), rs.getDouble("height"),
								rs.getTimestamp("birthday").toLocalDateTime()));
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return resultDtos;
	}

	public CustomerDto selectId(int id) {
		CustomerDto resultDtos=new CustomerDto();
		ResultSet rs=DBConn.statementQuery(String.format("select * from customer where id=%d", id));
		if(rs!=null) {
			try {
				rs.next();
				resultDtos=new CustomerDto(rs.getInt("id"),rs.getString("name"),rs.getDouble("height"),
						rs.getTimestamp("birthday").toLocalDateTime());
			}catch (SQLException e) {
				e.printStackTrace();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return resultDtos;
	}

	public void insert(CustomerDto dto) {
		String sql=String.format("insert into customer values("+"%d,'%s',%f,to_date('%s','yyyy-mm-dd HH24:mi:ss'))",
				dto.getId(),dto.getName(),dto.getHeight(),dto.getBirthday().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
		DBConn.statementUpdate(sql);
		System.out.println("[입력 완료]");
	}

	public void update(String updatename, int updateid) {
		String sql=String.format("update customer set id = %d where name='%s'",updateid,updatename);
		DBConn.statementUpdate(sql);
		System.out.println("[수정 완료]");
	}

	public void delete(int id) {
		String sql = String.format("delete customer where id=%d", id);
		DBConn.statementUpdate(sql);
		System.out.println("[삭제 완료]");
	}

	public ArrayList<Integer> getIds() {
		ArrayList<Integer> ids=new ArrayList<Integer>();
		ResultSet rs=DBConn.statementQuery(String.format("select * from customer"));
		try {
			while(rs.next()) {
				ids.add(rs.getInt("id"));
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return ids;
}

	public int getMaxId() {
		int maxIdValue=-1;
		ResultSet rs=DBConn.statementQuery(String.format("select max(id) as maxId from customer"));
		if(rs!=null) {
			try {
				rs.next();
				maxIdValue=rs.getInt("maxId");
			}catch (SQLException e) {
				e.printStackTrace();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return maxIdValue;
	}
}

2. CustomerDto
package com.human.dto;

import java.time.LocalDateTime;
import java.util.Objects;

public class CustomerDto {
	private Integer id;
	private String name;
	private Double height;
	private LocalDateTime birthday;
	
	public CustomerDto() {}
	public CustomerDto(Integer id, String name, Double height, LocalDateTime birthday) {
		super();
		this.id = id;
		this.name = name;
		this.height = height;
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "CustomerDto [id=" + id + ", name=" + name + ", height=" + height + ", birthday=" + birthday + "]";
	}
	
	@Override
	public int hashCode() {
		return Objects.hash(birthday, height, id, name);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CustomerDto other = (CustomerDto) obj;
		return Objects.equals(birthday, other.birthday) && Objects.equals(height, other.height)
				&& Objects.equals(id, other.id) && Objects.equals(name, other.name);
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Double getHeight() {
		return height;
	}
	public void setHeight(Double height) {
		this.height = height;
	}
	public LocalDateTime getBirthday() {
		return birthday;
	}
	public void setBirthday(LocalDateTime birthday) {
		this.birthday = birthday;
	}
}

3. DBConn
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConn {
	private DBConn() {}
	private static Connection dbConn = null;
	private static Statement st = null;
	private static ResultSet rs = null;
	public static Connection getInstance() {
		if(dbConn == null) {
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				String url = "jdbc:oracle:thin:@localhost:1521:xe";
				String id = "c##human";
				String pw = "human";
				dbConn = DriverManager.getConnection(url,id,pw);
				System.out.println("DBConnection...");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return dbConn;
	}
	
	public static void dbClose() {
		try {
			if(rs != null) rs.close();
			if(st != null) st.close();
			if(dbConn != null) dbConn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			rs = null;
			st = null;
			dbConn = null;
		}
	}
	
	public static int statementUpdate(String sql) {
		DBConn.getInstance();
		int rValue = -1;
		if(dbConn != null) {
			try {
				if(st == null) st = dbConn.createStatement();
				rValue = st.executeUpdate(sql);
			} catch(SQLException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("not connected...");
		}
		return rValue;
	}
	
	public static ResultSet statementQuery(String sql) {
		DBConn.getInstance();
		if(DBConn.dbConn != null) {
			try {
				if(st == null) st = dbConn.createStatement();
				rs = st.executeQuery(sql);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("not connected....");
		}
		return rs;
	}
}

4. UserInput
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class UserInput {
	private static Scanner sc = new Scanner(System.in);
	public static int inputInt(String st) {
		System.out.println(st + "정수 입력");
		return Integer.parseInt(sc.nextLine());
	}
	
	public static double inputDouble(String st) {
		System.out.println(st + "실수 입력");
		return Double.parseDouble(sc.nextLine());
	}
	
	public static String inputString(String st) {
		System.out.println(st + "문자 입력");
		return sc.nextLine();
	}
	
	public static LocalDateTime inputLocalDateTime(String str) {
		System.out.println(str + "시간 입력(yyyy-MM-dd HH:mm:ss");
		return LocalDateTime.parse(sc.nextLine(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
	}
	
	public static String dateToString(LocalDateTime date) {
		return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
	}
}

5. CustomerService
import java.util.ArrayList;

import com.human.dao.CustomerDao;
import com.human.dto.CustomerDto;

public class CustomerService {
	private CustomerDao dao = new CustomerDao();
	public ArrayList<CustomerDto> select() {
		return dao.select();
	}
	
	public void insert(CustomerDto dto) {
		dao.insert(dto);
	}
	
	public void update(String updatename, int updateid) {
		dao.update(updatename, updateid);
	}
	
	public void delete(int id) {
		dao.delete(id);
	}
}

6. Model
import java.util.HashMap;

public class Model {
	// MVC패턴을 만들때 많은 메소드들이 사용되는데 동일한 모양으로 메소드를 호출해서 데이터를 주고받기 위한 매개변수 map을 이용
	private HashMap<String, Object> hashmap = new HashMap<String, Object>();
	
	public void setAttribute(String key, Object value) {
		hashmap.put(key, value);
	}
	
	public Object getAttribute(String key) {
		return hashmap.get(key);
	}
	
	public void removeAttribute(String key) {
		hashmap.remove(key);
	}
}

7. ViewInterface
package com.human.view;

import com.human.model.Model;

public interface ViewInterface {
	public void execute(Model model);
}

8. SelectResultView
import java.util.ArrayList;

import com.human.dto.CustomerDto;
import com.human.model.Model;

public class SelectResultView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("---------------------------------------------");
		for(CustomerDto dto : (ArrayList<CustomerDto>)model.getAttribute("resultDtos")) {
			System.out.println(dto);
		}
	}
}

9. InsertInputView
import com.human.dto.CustomerDto;
import com.human.model.Model;
import com.human.util.UserInput;

public class InsertInputView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("---------------------------------------------");
		System.out.println("생성할 Customer 데이터 입력");
		CustomerDto dto = new CustomerDto();
		dto.setId(UserInput.inputInt("id 입력"));
		dto.setName(UserInput.inputString("이름 입력"));
		dto.setHeight(UserInput.inputDouble("키 입력"));
		dto.setBirthday(UserInput.inputLocalDateTime("생일 입력"));
		model.setAttribute("dto", dto);
	}
}

10. UpdateInputView
import com.human.model.Model;
import com.human.util.UserInput;

public class UpdateInputView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("-------------------------------------------");
		String updatename = UserInput.inputString("수정할 이름 입력");
		int updateid = UserInput.inputInt("수정할 id 입력");
		model.setAttribute("updateid", updateid);
		model.setAttribute("updatename", updatename);
	}
}

11. DeleteInputView
import com.human.model.Model;
import com.human.util.UserInput;

public class DeleteInputView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("-----------------------------------");
		System.out.println("삭제할 데이터 입력");
		int id = UserInput.inputInt("id 입력");
		model.setAttribute("id", id);
	}

}

12. MainMenuView
import com.human.model.Model;
import com.human.util.UserInput;

public class MainMenuView implements ViewInterface {
	@Override
	public void execute(Model model) {
		String strMainMenu = "~ Customer Service 프로그램 ~";
		strMainMenu += " | 1. Select | 2. Insert | 3. Update | 4. Delete | 5. Exit |";
		model.setAttribute("input", UserInput.inputInt(strMainMenu));
	}
}

13. ExitOutputView
import com.human.model.Model;

public class ExitOutputView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("--------------------------------");
		System.out.println("프로그램을 종료합니다.");
		model.setAttribute("input", 5);
	}

}

14. ErrorOutputView
import com.human.model.Model;

public class ErrorOutputView implements ViewInterface {
	@Override
	public void execute(Model model) {
		System.out.println("보기에 있는 숫자를 입력하세요");
	}

}

15. DBConnEx
import java.util.ArrayList;

import com.human.dto.CustomerDto;
import com.human.model.Model;
import com.human.service.CustomerService;
import com.human.view.DeleteInputView;
import com.human.view.ErrorOutputView;
import com.human.view.ExitOutputView;
import com.human.view.InsertInputView;
import com.human.view.MainMenuView;
import com.human.view.SelectResultView;
import com.human.view.UpdateInputView;
import com.human.view.ViewInterface;

public class DBConnEx {

	public static void main(String[] args) throws Exception {
		CustomerService customerService = new CustomerService();
		ViewInterface view = null;
		int input = 0;
		while(input != 5) {
			Model model = new Model();
			view = new MainMenuView();
			view.execute(model);
			input = (int)model.getAttribute("input");
			switch(input) {
			case 1:
				ArrayList<CustomerDto> resultDtos = customerService.select();
				model = new Model();
				model.setAttribute("resultDtos", resultDtos);
				view = new SelectResultView();
				view.execute(model);
				break;
			case 2:
				model = new Model();
				view = new InsertInputView();
				view.execute(model);
				customerService.insert((CustomerDto)model.getAttribute("dto"));
				break;
			case 3:
				model = new Model();
				view = new UpdateInputView();
				view.execute(model);
				customerService.update((String)model.getAttribute("updatename"), (int)model.getAttribute("updateid"));
				break;
			case 4:
				model = new Model();
				view = new DeleteInputView();
				view.execute(model);
				customerService.delete((int)model.getAttribute("id"));
				break;
			case 5:
				model = new Model();
				view = new ExitOutputView();
				view.execute(model);
				input = (int)model.getAttribute("input");
				break;
			default:
				model = new Model();
				view = new ErrorOutputView();
				view.execute(model);
				break;
			}
		}

	}

}
profile
IT 개발자가 되기 위한 기록

0개의 댓글