DAO의 작성과 적용

 

1. DAO (Data Access Object)란?

: 데이터에 접근하기 위한 객체.

: 메서드들을 모아서 만든 것. DataBase에 저장된 데이터를 읽기, 쓰기, 삭제, 변경을 수행 (CRUD)

: DB테이블 당 하나의 DAO를 작성.

:컨르롤러에서 DAO를 이용해서 데이터 베이스를 다루게 된다.

 

 

 

2. 계층(layer)의 분리

(일반적으론 Presentation Layer, Business Layer, Data Access Layer 3계층으로 나눈다)

 

: 컨트롤러가 직접 메서드를 가지고 데이터베이스에 접근하게 되면 중복되는 메서드가 생길 수 있다.

예) LoginController 와 RegisterController 모두 selectUser(String): User  동일 메서드를 가짐. ▶ 공통부분을 떼어내야 한다.

 

: 컨트롤러가  UserDao를 통해서 데이터베이스에 접근하도록 한다 분리 (1.관심사의 분리 / 2.변하는것과 변하지 않는것의 분리 / 3.중복)

👉 장점: 변경이 유리해짐

 

 


 

❓ 대체 assertTrue에러는 왜 난걸까??

테스트 코드를 작성하며  boolean값을 반환하는 assertTrue(rowCnt==1); 을 통해, 동일 데이터를 끌고왔는지를 보는데,

앞에선 잘 해놓고 왜 이 테스트에서만 rowCnt를 타입 선언해달라고 오류가 뜨는질 모르겠다.

 

@Test
public void UpdateUser() {
    Calendar cal = Calendar.getInstance(); // 자바 유틸은 시간정보를 가져와서 자꾸 불일치가 뜸. 그래서 날짜만 출력되도록 조정함.
    cal.clear();
    cal.set(2021,1,1);

    userDao.deleteUser("asdf");
    User user = new User("asdf", "1234", "you", "aaa@aaa.com", new Date(cal.getTimeInMillis()), "fb", new Date());
    userDao.insertUser(user);
    assertTrue(rowCnt!=1); // 문제의 한 줄

    user.setPwd("3456");
    user.setEmail("bbb@bbb.com");
    rowCnt = userDao.updateUser(user);
    assertTrue(rowCnt==1);

    User user2 = userDao.selectUser(user.getId());
    assertTrue(user.equals(user2));
}

 

java.lang.AssertionError 가 자꾸 저 문제의 한줄을 가리키는데, 

rowCnt가 자꾸 빨간글씨가 뜨기에, 해달라는대로 클래스 안에 public int rowCnt;를 한줄 추가했다.

이 한 줄이 없으면 이렇게 아예 인식을 못함

대체 왜 여기에서만? 뭐지??

내가 import를 잘못했나 싶어서 다른 파일의 import문을 그대로 복붙도 해봤는데, 의미 없음.

심지어 타입을 선언하고 결과값도 1이 아니라고 (rowCnt!=1)로 넣어야 테스트가 통과됐다고 뜬다.

업데이트 하는 코드인데 왜 불일치여야 통과됐다고 나오는지 아직까지 이해를 못하고 있다... 강의코드랑 똑같이 넣었는데 왜 내코드는..왜...?

다른 테스트는 rowCnt 잘만 인식하면서 왜 이 파일만...?  sql조회해보면 또 멀쩡하게 처리는 되어있음. 대체 왜...?

 

미래의 내가 이해해서 고치러 와주길.

+ Recent posts