카테고리 없음
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