ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02 MyBatis로 DAO작성하기
    Spring/03 MyBatis로 게시판 만들기 2023. 7. 11. 19:45
    반응형

    MyBatisDAO작성하기

    1) BoardDao의 작성

    >> 작업 순서 ① → ② → ③ → ④ 이지만,

          ① → ② → 으로 Extract Interface를 이용하여 편하게 할 수도 있다

     

     

    2) DTO? - Data Transfer Object

    - 계층간의 테이터를 주고 받기 위해 사용되는 객체

     

    - 분리된 대상에 Model을 사용했던 것처럼 DTO가 사용된다

     

    - DTO : 각 계층간에 데이터 전달

    >> VO(Value Object) 라고도 사용되지만 VOimmutable(불변)이기 때문에

          DTO와 같은 용어로 사용되는건 잘 못 되었다

     

    예외처리

    @Repository에서 예외처리 한다면?

    @Service에서 try{ 커밋 } catch{ 롤벡 }으로 처리 하기 때문에

    @Repository에서 예외처리되면 @ServiceTx은 커밋해야 될지 롤벡해야 될지 모르게 된다

    (무조건 커밋 되어 버린다)

    따라서 @Repository는 보고만 하게 한다

    >> 예외처리는 @Service @Controller 양쪽에서 처리 중 선택사항 3개중 고민이라면

          ②에서 처리

     

     

    2-1) 실습

    boardMapper.xml ( main/resources/mapper(폴더 생성)/boardMapper.xml(생성) )

    >> resultType="BoardDto" 되어 있는데

         아래 mybatis-config.xml에서 <typeAliases>alias=“BoardDto로 등록되어 있다

    >> 나머지는 작성해 볼 것

     

     

    mybatis-config.xml ( main/resources/mybatis-config.xml (생성) )

    >> 은 별명 은 실제 이름

    >> <typeAliases>는 여러개 사용 할 수 있다

    >> class BoardDto 만들어 줘야한다

     

     

    BoardDao.java ( main/java/com.fastcampus.ch4/dao/BoardDao(생성) )

    >> return session.selectOnesession이 가지고 있는 메서드

    >> BoardDto생성

     

     

    BoardDto.java ( main/java/com.fastcampus.ch4/domain/BoardDto(생성) )

    DB의 테이블 값을 참조해서 만든다

    생성자는 title, content, writer를 만들어 준다

    getter and setter(전부다) 만들어준다, MyBatis가 읽고 쓸 수 있도록 한다

    toString(전부다) 만들어준다

    equals( ) and hashCode( )bno, title, content, writer만 만든다

    >> view_cnt 같은 경우는 계속 변할 경우가 발생하기 때문이다

     

     

    BoradDao.java

    >> boardMapper.xml에서 mappernamespaceBoardDaoid(selet) 앞에 넣어줘야한다

    >> String namespce의 마지막에 점(.)을 넣어 줘야한다

    >> throws Exception은 예외가 발생하는 것을 서비스 계층으로 던져주기 위해서 추가했다

    >> 나머지는 작성

     

     

    BoradDao.java(인터페이스 추출) BoradDaoImpl.java

    >> 마우스 우 클릭

    >> 체크 Rename 전부 선택 클릭 후 완료

     

     

    BoardDao.java

     

    BoardDaoImpl.java

    >> 메서드 내용은 생략

     

     

    BoardDaoImplTest.java (BoardDaoImpl.java에서 추출하여 Test 만들기)

    >> 임시로 테이블에 값을 넣어줬다

    >> select 메서드만 테스트 확인 해보았다

     

    오류 발생시 해결 방법 찾아보기

    - MySQL 데이터 확인

    - rootcontext.xml에서 sql 연결 확인 또는 sqlSessionFactory에서 *Mapper.xml 확인

    - boardMapper.xml 확인

    - BoardDao.java BoardDaoImpl.java 확인 기타 등등 확인

     

     

     

    3) #{ }${ }의 차이

    >> #{ }sql injection공격에 방어적 이지만,

         ${ }sql injection 공격에 취약하다 대부분 ${ }은 내부적으로 사용된다

         ${ } 외부적으로 사용시 철저한 검즘이 필요

     

     

     

    4) XML의 특수문자 처리

    - XML 내의 특수문자(<,>,&,..)&lt; &gt;로 변환 필요하다

    - 또는 특수문자가 포함된 쿼리를 <![CDATA[]]>로 감싸야 한다

     

     

    반응형
Designed by Tistory.