-
02 MyBatis로 DAO작성하기Spring/03 MyBatis로 게시판 만들기 2023. 7. 11. 19:45반응형
MyBatis로 DAO작성하기
1) BoardDao의 작성
>> 작업 순서 ① → ② → ③ → ④ 이지만,
① → ② → ③ → ④ 으로 Extract Interface를 이용하여 편하게 할 수도 있다
2) DTO란? - Data Transfer Object
- 계층간의 테이터를 주고 받기 위해 사용되는 객체
- 분리된 대상에 Model을 사용했던 것처럼 DTO가 사용된다
- DTO : 각 계층간에 데이터 전달
>> VO(Value Object) 라고도 사용되지만 VO는 immutable(불변)이기 때문에
DTO와 같은 용어로 사용되는건 잘 못 되었다
※ 예외처리
@Repository에서 예외처리 한다면?
@Service에서 try{ 커밋 } catch{ 롤벡 }으로 처리 하기 때문에
@Repository에서 예외처리되면 @Service의 Tx은 커밋해야 될지 롤벡해야 될지 모르게 된다
(무조건 커밋 되어 버린다)
따라서 @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.selectOne은 session이 가지고 있는 메서드
>> 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에서 mapper의 namespace를 BoardDao의 id(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 내의 특수문자(<,>,&,..)는 < >로 변환 필요하다
- 또는 특수문자가 포함된 쿼리를 <![CDATA[와]]>로 감싸야 한다
반응형'Spring > 03 MyBatis로 게시판 만들기' 카테고리의 다른 글
06 게시판 읽기, 쓰기, 삭제, 수정 기능 구현(2) (0) 2023.07.18 05 게시판 읽기, 쓰기, 삭제, 수정 기능 구현(1) (0) 2023.07.16 04 게시판 목록 만들기와 페이징-TDD(2) (0) 2023.07.14 03 게시판 목록 만들기와 페이징-TDD(1) (1) 2023.07.13 01 MyBatis의 소개와 설정 (0) 2023.07.10