카테고리 없음

Part 3 08 영속/비즈니스 계층의 CRUD 구현

parkrams 2023. 6. 15. 16:47
728x90

환경설정

SpringFramework Maven Mybatis

mapper = SpringBoot 의 Repository 역할

8.1.1 VO 클래스 작성

  • 테이블 설계 기준으로 작성
  • DTO VO 차이
  • DTO (Data Transfer Object) : 데이터 전달 객체
    • 계층간 데이터를 주고 받을 데이터를 전달하는 바구니
    • 주로 View와 Controller 사이에서 데이터를 주고 받을 때 활용
  • VO (Value Object) : 값 자체를 표현하는 객체
    • 객체들의 주소가 달라도 값이 같으면 동일한 것으로 지정
    • 고유번호가 서로 다른 만원 2장이 있다고 생각
    • setter 메소드는 가지지 않는다.
  • DB 관련 오류 시 ojdbc 의존성 주입 확인
    • 잘한 것 같은데 이상하게 오류 발생 시 의존성 주입 부터 확인
  • 콘솔창에 테이블 형태로 이쁘게 출력 되게 하려면
    • java - main - resources 경로에 log4jdbc.log4j2.properties 파일을 만든 뒤
    • log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator <<- 코드 추가
  • 패키지와 클래스의 이름을 동일하게 하면 나중에 혼란스러운 상항을 피할 수 있음

// 23 - 6 - 16 -

188 ~ 189 mapper xml 파일 설정 중 오류 관련 문제
  • 정상 코드
    <select id="getList" resultType="com.tom.webtomcat.domain.BoardVO">
    <![CDATA[
        select * from tbl_board where bno > 0
    ]]>

    </select>
  • 오류 코드
    <select id="getList" resultType="com.tom.webtomcat.domain.BoardVO">  </select>
    <![CDATA[
        select * from tbl_board where bno > 0
    ]]>
  • 자동완성을 너무 믿어.. 생각지 못한 곳에서 오류 발생. select 닫는 부분이 쿼리문 밑에 있어야 하는데 위에 있음...
오라클 DB 시퀀스
  • 오라클 시퀀스 값이1 2 3 4 로 증가하다가 갑자기 21 부터 시작 하는 이유
    • sequence에 cache 옵션이 선택 되었기 때문
    • cache옵션을 사용하면 속도를 증가시키기 위해 sequence번호를 한번에 여러 개씩 메모리에 올려놓고 작업
    • DB를 종료하고 다시 시작 하면 메모리에 있던 시퀀스가 삭제 되고 그 뒤 부터 시작하기 때문
BoardMapper에 Read 추가
   <select id="read" resultType="com.tom.webtomcat.domain.BoardVO">
        select * from tbl_board where bno = #{bno}
    </select>
  • MyBatis는 Mapper 인터페이스의 리턴 타입에 맞게 select의 결과를 처리하기 때문에 board의 모든 칼럼은 BoardVO 속성값으로 처리.
  • bno가 존재하면 setBno()를 호출
  • MyBatis의 모든 파라미터와 리턴 타입의 처리는 get파라미터명(), set칼럼명()의 규칙으로 호출
  • 하지만 위 코드의 경우 #{속성}이 1개만 존재하는 경우 별도의 get 파라미터명()하지 않고 처리
BoardDelete 추가
   BoardMapper Interface
   public int delete(Long bno);  

    <delete id="delete" >
        delete from tbl_board where bno = #{bno}
    </delete>
  • 삭제되면 1 출력, 값이 없으면 0 출력
  @Test
    public String testDelete(){
        int s = mapper.delete(22L);
        if(s==0){
           return  "값이 없습니다";
        } else{
          return  "정삭적으로 삭제 되었습니다.";
        }

    }
  • delete 메서드는 return 타입이 없은 void로 메서드 지정을 해야 한다.
  • 정상적인 테스트 코드
   @Test
    public void  testDelete(){
        int s = mapper.delete(22L);

        if(s==0){
            System.out.println( "값이 없습니다");
        } else{
            System.out.println("정상적으로 삭제 됨 ");
        }

    }
728x90