ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 day81. Todo 게시판 만들기 실습
    기록 2022. 12. 28. 23:02

    TodoListController
       페이지번호를 조회한다.
       총 일정갯수를 조회한다.(삭제 상태인 것 제외)
       페이징처리에 필요한 객체를 생성한다.
       페이징처리에 필요한 정보를 담는 Map객체를 생성하고, begin/end값을 추가한다.
       모든 일정을 조회해서 요청객체에 저장한다.(삭제 상태인 것 제외) 
       페이징처리 정보를 요청객체에 저장한다.
       todo/list.jsp를 반환한다.

    TodoRegisterFormController
       모든 카테고리 정보를 조회한다.
       요청객체에 카테고리목록 정보를 속성으로 저장한다.

       todo/form.jsp를 반환한다.

    TodoRegisterController
       로그인정보를 조회하고, 로그인 상태가 아니면 로그인 폼을 요청하는 url을 반환한다.
       폼 입력값을 조회한다.
       Todo객체를 생성해서 제목/시작일/종료일/카테고리번호/설명/작성자 아이디를 대입한다.
       할일 정보를 테이블에 저장시킨다.
       redirect:list.hta를 반환한다.

     

     

    리스트로 진입하는 방법을 확인해야한다.

    헤더, 페이지네비게이션, 검색, 행의 갯수 옵션 등이 있다. 

    이후 검색조건 쿼리에서 작성해준다.

    할일 목록화면의 여러 컨트롤(버튼, 셀렉트박스, 체크박스, 입력필드 등)을 확인하고, 요청 파라미터로 선정한다.

    요청 파라미터 값 조회, 요청파라미터값을 조회조건으로 활용해서 데이터베이스를 엑세스한다. (Dao객체의 메소드를 호출)

    화면에 표시할 정보를 요청객체의 속성으로 저장하고,  jsp를 반환한다.

     

    * 코딩 순서 *

    0. ERD, 테이블 명세서 확인

    1. 스토리보드 확인 (화면 확인, 해당 화면에서 표시되는 정보를 확인)

    2. VO 혹은 DTO 정의하기

    3. XML, DAO 정의하기

    4. TodoRegisterController 구현하기

        * 요청파라미터 확인

        * 객체에 저장

        * Dao 이용해서 테이블에 저장

        * 재요청 URL 반환

     

    강사님은 sql, dao, controller, 화면 순으로 구현한다. 

     

     

    There is no READABLE property named 'value' in class 'com.sample.app.dto.TodoWorkListDto'

     

    쿼리문에 # # 갯수를 잘못 적은 것! 

     


    실제로 ibatis가 실행하는게 selectOne, selectList인데 selectList는 여러건이 조회될 수 있는 것에 사용하고, selectOne은 0건 아니면 1건이 조회되는 것에 사용된다. 

    행이 여러개 나올 수 있으니까 여러개 담을 수 있는 ArrayList객체를 먼저 만든다.

     

    List  SqlMapper.selectList(String id)
    List SqlMapper.selectList(String id, Object parameter)

    1. 여러 행의 정보를 저장하기 위해서 List객체를 생성한다.
    List<ResultClass> list = new ArrayList<>();
    2. 각 행마다 ResultClass에 지정된 객체를 생성하고, 각 컬럼의 값을 생성한 객체의 멤버변수에 대입한다.
    3. 생성한 객체를 List객체에 추가한다.
    4. 최종적으로 List객체를 반환한다.
    5. 결론 : List객체가 무조건 반환된다.

     

    조회결과가 하나도 없으면 2번,3번 동작은 일어나지 않겠지만 List객체는 만들어놨으니까 null일수가 없다.

    selectList의 결과는 비어있을 수는 있지만 null일수는 없다.

     

    따라서 empty를 써야 한다. empty는 null이어도 true이고 길이가 0인 List객체도 true로 판정한다.


    Object  SqlMapper.selectOne(String id)
    Object  SqlMapper.selectOne(String id, Object parameter)
    * 조회결과가 존재하면 resultClass에 지정된 객체를 생성하고, 각 컬럼의 값을 객체의 멤버변수에 대입한다.
    * 조회결과가 존재하지 않으면  객체를 생성하지 않는다.
    * 결론 : 조회결과 존재하면 객체가 반환된다, 존재하지 않으면 null이 반환된다.

     

    select는 항상 두가지 경우를 생각해야 한다. primary key, Unique 제약조건이 걸려있는 컬럼이 조회 조건인지 아니면 그게 아닌 걸로 조회하는지에 따라 메소드의 종류가 달라지고, 종류에 따라서 List객체가 반환되거나 객체하나가 반환되거나 null이 반환될 수가 있는 것이다.

     

    내가 사용하는 메소드가 selectOne이냐 selectList냐에 따라서 다름!

     

    empty로 List객체의 비어있는 여부, 일반 객체의 null인지 여부 둘 다 확인가능하니까 empty로 쓰는게 좋다.

     

     

     

     

     

    댓글

Designed by Tistory.