한 화면에서 두가지 insert가 동시에 일어나는데,
두 데이터가 Master/Slave 구조라면..
즉 FK가 걸려 있다는 말이겠죠..
그럼 첫번째 insert시에 key 값을 알아 내야 하는데,
그건 mybatis(ibatis)의 selectKey를 사용하면 된다.
<selectKey resultType="int" keyProperty="bbNo" order="BEFORE">
SELECT NVL( MAX(BB_NO), 0) + 1 FROM SUBLTN01 WHERE PJ_ID = #{pjId} AND BB_TP = #{bbTp}
</selectKey>
이를 이용하면 sql 실행 뒤 return시 생성된 key값이
넣어 주었던 map에 포함되어 return된다.
즉,
public HashMap insertSuBltn01(HashMap dto) throws Exception {
dao.insert("insertSubltn01", dto);
return dto;
}
위와 같이 insert가 실행되면 넘겨준 파라미터 map에 key값이 담겨진다.
model(DTO,Vo)를 사용했다면 해당 객체에 담겨지겠지..
잠깐 비교하자면..
ibatis는 return되는 int 값에 key 값이 넘어왔었는데,
mybatis가 되면서 위와 같이 변경되었다.
출처:mybatis selectKey 사용.
< insert id= "makeReferenceSeq" parameterClass= "RefSeq" >
INSERT INTO CM_REFERENCE_SEQ
(
REF_ID, REF_KEY, BUSINESS_GRP, REF_NO, STATE, REG_ID, REG_DT
)VALUES(
#ref_id#, #ref_key#, #business_grp#, 1, 'NOR', #writer#, now()
)
ON DUPLICATE KEY
UPDATE
REF_NO = REF_NO + 1,
MOD_ID = #writer#,
MOD_DT = now()
<selectKey resultClass ="Long" type="post">
<!-- SELECT LAST_INSERT_ID(REF_NO) as REF_NO FROM CM_REFERENCE_SEQ -->
SELECT LAST_INSERT_ID(REF_NO) AS REF_NO FROM CM_REFERENCE_SEQ
WHERE REF_ID = #ref_id#
AND REF_KEY = #ref_key#
</selectKey >
</ insert>
'IT노트 > iBatis' 카테고리의 다른 글
ibatis JSON 연동 (0) | 2015.02.24 |
---|---|
IN 사용 방법 중 하나 (0) | 2015.02.02 |
[iBatis] like문, escape문자, <![CDATA[ ]]> (0) | 2015.02.02 |
Ibatis list Map param[펌] (0) | 2015.02.02 |
Ibatis 동적 테이블명 (0) | 2015.02.02 |