이번엔 Spring이랑 Mybatis를 연계해서 쓰다보니 이런 문제가 발생했다.
로그를 입력하는데 id가 필요한데 등록된 아이디를 어떻게 가져오지 ?
데이터베이스에 등록된 ID가 뭔줄 알고 가져오지 ? 라는 궁금증이 생겼다.
왜냐면 기존에 처리가 아래처럼 되어있다보니 그런 고민을 하게됐다.
java단에서 max ID를 가져오는 거였다면 고민할 필요 없었을텐데 말이다.
selectKey를 통해서 vo의 id란 property를 활용해서 #{fileId}를 셋팅한다.
그리고 거기서 나온 결과값을 long type으로 vo에 반환하게 되며
order는 실행순서로 아래의 insert가 수행되기 전에 실행된다.
<insert id="insert" parameterType="vo" keyProperty="id" keyColumn="id">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
select DECODE(cnt, 0, SGDS_DSGN_DOC_FILE_ID.nextval, #{fileId})
from (
select count(*) cnt
from SGDS_DSGN_DOC_FILE_VER
where file_id = #{fileId}
)
</selectKey>
insert into SGDS_DSGN_DOC_FILE_VER (id)
values (id)
</insert>
이렇게 사용하게 되면 이 쿼리가 사용된 이후에 vo를 통해서 받을 수 있다.
dsgnDocMapper.insertYujiDocVer(dsgnDocFileVO);
신기한 것은 return받는 부분이 없는데도 말이다.
'SPRING' 카테고리의 다른 글
[MONGODB+SPRING] 몽고디비+스프링 연계하기 (0) | 2015.07.17 |
---|---|
[Spring MVC] 스프링 MVC 아키텍쳐 (0) | 2014.04.26 |
[토비] Spring 싱글톤 패턴의 이야기 (0) | 2014.04.12 |
[file download] 스프링 BeanNameResolver 이용한 파일 다운로드 (0) | 2014.04.01 |
[ERROR] Maven 환경의 프로젝트 구동시 에러 (0) | 2013.10.08 |