ITスクール DAY17 DAO/DTO/CRUD

2023/08/01に公開

DB(Date Base)

我々がクラスを作成する理由は、クラスからのオブジェクトを利用し、データーを扱うためだ。

DTO (Data Tranfer Object)

データー交換のためのJava Beanを意味。getter, setterを通して、値を伝える。DTOを作成する際の原則がいくつがある。

  • fieldはprivate, getter/setterはpublicにする。
  • classはpackage化する
  • member fieldはpropertyともいう。
  • propertyは、javaBeanに保存されている値だ。

➞ Java Bean:特定な情報(id, password, name , job)などを持っているクラスを表現するための規則(テンプレート)

DtoClass

package oop20230801.crud;

public class DtoClass {        //"책"의 한면(page)
	
private int pageNum;
private int age;
private String name;
private String birth;
private String address;
	
public DtoClass() {}
	
	
public DtoClass(int pageNum, int age, String name, String birth, String address) {
	super();
	this.pageNum = pageNum;
	this.age = age;
	this.name = name;
	this.birth = birth;
	this.address = address;
   }

	
public int getPageNum() {
	return pageNum;
}


public void setPageNum(int pageNum) {
	this.pageNum = pageNum;
}


public int getAge() {
	return age;
}


public void setAge(int age) {
	this.age = age;
}

public String getName() {
	return name;
}


public void setName(String name) {
	this.name = name;
	}


public String getBirth() {
	return birth;
}


public void setBirth(String birth) {
	this.birth = birth;
}

public String getAddress() {
	return address;
}


public void setAddress(String address) {
	this.address = address;
}


@Override
public String toString() {
return "DtoClass [pageNum="+pageNum+", age="+age+", name=" +name+", birth=" +birth+", address="+address+"]";
}
}


DAO (Data Access Object)

DBのデーターにアクセスするためのオブジェクト。
DBにアクセスし、デーたーのCreate(生成)、Read(検索)、Update(修正), Delete(削除)を処理。この処理原則を略してCRUDと呼ぶ。

DaoClass
package oop20230801.crud;

import java.util.*;

public class DaoClass {

  Scanner sc = new Scanner(System.in);
  DtoClass dtoArr[] = new DtoClass[20];      //20면(page) 책
	
  private boolean swit[] = new boolean[20];  //페이지의 유효 확인(boolean 초기값:false)
   private int pageNum;
   private String check;
	
  public DaoClass() {
		
  }
	
  // 1. Insert - 추가
   public void insert(){
      	System.out.println();
	for(int i = 0; i < dtoArr.length; i++) {
	  if(swit[dtoArr.length-1] == true) {    //항상 부정상황을 먼저 처리한다.
	System.out.println("더 이상 페이지를 추가 할 수 없습니다.");
	      	return;
	   }else if (swit[i] = false) {
	 	System.out.println((i+1) + "번 페이지에 작성 하실 수 있습니다.");
				break;
		}
	}//for end()
		
	System.out.print("# 나이\n>>>");
	int age = sc.nextInt(); 
	System.out.print("# 이름\n>>>");
	String name = sc.next();
	System.out.print("# 생년월일\n>>>");
	String birth = sc.next();
	System.out.print("# 주소\n>>>");
	String address = sc.next();
		
	for(int i = 0; i < dtoArr.length; i++) {
	  	if(swit[i] == false) {
			swit[i] = true;
			pageNum = i+1;
	dtoArr[i] = new DtoClass(this.pageNum, age, name, birth, address);
	  System.out.println(pageNum + " 번째 페이지가 작성되었습니다.");
			break;
	 }
	}//for end

   }//insert() end()
	
  // 2. Delete - 추가
	public void delete() {
	System.out.print("\n삭제하고 싶은 책의 쪽수를 입력하시오(1~20)\n>>>");
	   pageNum = sc.nextInt();
		
	if(dtoArr[pageNum -1] == null) {
	   	System.out.println("\n작성된 페이지가 없는 쪽수입니다");
	 	return;
	}
	System.out.println("\n삭제하고 싶은 " +pageNum+ "페이지의 내용입니다.");
	System.out.println(dtoArr[pageNum - 1].toString());
	System.out.print("페이지를 삭제하고 싶으시면 'Y' 아니면 'N'을 입력하시오\n>>>");
	check = sc.next();
	if(check.equalsIgnoreCase("Y")) {
		swit[pageNum - 1] = false;
		dtoArr[pageNum -1] = null;
		System.out.println("\n페이지가 삭제되었습니다.");
	}else {
		System.out.println("\n삭제를 취소합니다.");
		return;
	  }
	
	} //delete end
	
  // 3. Search - 추가
	public void search() {
	System.out.print("검색하고 싶은 책의 페이지수를 입력하시오( 1 ~ 20 )\n>>>");
	pageNum = sc.nextInt();
		
	if(dtoArr[pageNum -1] == null) {
		System.out.println("\n작성된 페이지가 없는 쪽수입니다");
		return;
	 }
	     System.out.println("\n검색하고 싶은 "  +pageNum+ "페이지의 내용입니다.");
	     System.out.println(dtoArr[pageNum - 1].toString());
		
	}//search() end
	
// 4. Update - 수정, 갱신
         public void update() {
	 System.out.print("수정하고 싶은 책의 페이지수를 입력하시오( 1 ~ 20 )\n>>>");
	 pageNum = sc.nextInt();
		
	 if(dtoArr[pageNum -1] == null) {
		System.out.println("\n작성된 페이지가 없는 쪽수입니다");
		return;
	  }
		
	 System.out.println("\n수정하고 싶은 "  +pageNum+ "페이지의 내용입니다.");
	   System.out.println(dtoArr[pageNum - 1].toString());
	   System.out.print("페이지를 수정하고 싶으시면 'Y' 아니면 'N'을 입력하시오\n>>>");
		check = sc.next();
		
	if(check.equalsIgnoreCase("Y")) {
		//페이지 수정 : 페이지 내의 전체(필드) 정보 수정(대입,덮어쓰기)
		System.out.print("# 나이\n>>>");
	int age = sc.nextInt(); 
	System.out.print("# 이름\n>>>");
	String name = sc.next();
	System.out.print("# 생년월일\n>>>");
	String birth = sc.next();
	System.out.print("# 주소\n>>>");
	String address = sc.next();
			
	dtoArr[pageNum-1] = new DtoClass(pageNum,age,name,birth,address);
			
	System.out.println("페이지가 수정되었습니다.");
	}
     }// update() end 
}

CRUD practice

CrudEx

package oop20230801.crud;

import java.util.Scanner;

public class CrudEx {
public static void main(String[] args) {
  	//menu
	Scanner sc = new Scanner(System.in);
	int chNum;
		
	//하위 메뉴 처리를 위한 인스턴스 생성(원래는 DAO를 먼저 만든다)
	DaoClass dao = new DaoClass();
		
	while(true) {
		System.out.println("###  실행 하실 작업의 번호를 입력하시오 ###");
		System.out.println("# 1. INSERT - 추가               #");
		System.out.println("# 2. DELETE - 삭제               #");
		System.out.println("# 3. SEARCH - 검색               #");
		System.out.println("# 4. UPDATE - 수정               #");			
		System.out.println("# 5. EXIT - 프로그램 종료           #");
		System.out.println("#################################");
		System.out.print(">>>");
			
		chNum = sc.nextInt();
			
			
		switch(chNum) {
 		case 1: 
		    dao.insert(); break;
		case 2:
        	    dao.delete(); break;
		case 3:	
	            dao.search(); break;
		case 4:
		    dao.update(); break;
		case 5: 
		System.out.println("프로그램을 종료합니다. 이용해주셔서 감사합니다.");
		   System.exit(0);
		}//switch end
		  	
	}//while end
  
}//main()end

}//class end

VO (Value Object)

Read-Only 属性を持っている値オブジェクト。
値タイプのみ表現するために、不変クラス(Read-Only)を作って使用する。
したがって、getter機能のみ存在する。

Discussion