728x90
insert 쿼리에서 pk 를 count 나 max 쿼리에 +1 을 하는 형태가 있을 수 있다.
이때 만들어진 pk 값을 다른 상세테이블이나 연계 테이블에 사용해야할 경우 리턴받아야 한다.
▶ selectKey 를 사용해서 pk 로 사용할 쿼리를 작성 한다.
- resultType 은 데이터형태를 지정한다.
- keyProperty 는 받을 변수명이다 parameterType 의 model 파일에 존재해야 한다.
- order 는 쿼리 실행전인지 실행후인지를 결정한다. after 는 당연히 실행후겠죠
<insert id="insertOrderMst" parameterType="orderMstDto">
<selectKey resultType="string" keyProperty="ordNo" order="BEFORE">
SELECT F_COMMON_DOCNO('od_order_mst')
</selectKey>
INSERT INTO od_order_mst
(ord_no, site_cd, ord_dt, ord_kind, ord_stat,
member_no, prdamt_tot, prdqty_tot, dcamt_tot, promdcamt_tot,
cpndcamt_tot, use_pt, deliveryamt_tot, ordamt_net, add_pt,
remain_pt, grade_cd, age_cd, ord_user, ord_mobile,
ord_zipcd, ord_addr1, ord_addr2, dlv_user, dlv_mobile,
dlv_zipcd, dlv_addr1, dlv_addr2, dlv_reason, device_fl,
active_yn, reg_dt, reg_usr)
VALUES(#{ordNo}, #{userDto.siteCd}, now(), 'SAL', 'S00',
#{userDto.memberNo}, #{prdamtTot}, #{prdqtyTot}, #{dcamtTot}, #{promdcamtTot},
#{cpndcamtTot}, #{usePt}, #{deliveryamtTot}, #{ordamtNet}, #{addPt},
#{remainPt}, #{userDto.gradeCd}, #{userDto.ageCd}, #{ordUser}, #{ordMobile},
#{ordZipcd}, #{ordAddr1}, #{ordAddr2}, #{dlvUser}, #{dlvMobile},
#{dlvZipcd}, #{dlvAddr1}, #{dlvAddr2}, #{dlvReason}, #{deviceFl},
'N', now(), #{userDto.memberNo})
</insert>
▶ parameterType 에서 정의된 model 에 orderNo 가 존재한다.
public class OrderMstDto extends CommonDto {
private String ordNo;
private String siteCd;
private String ordDt;
private String ordKind;
...
...
}
▶ insert 쿼리 실행 후 orderNo 를 확인해 보면 값이 바인딩된 것을 알 수 있다.
orderMapper.insertOrderMst(orderMstDto);
log.debug(orderMstDto.getOrdNo());
LIST
'Develop' 카테고리의 다른 글
[Javascript] 스크롤 div 밑에 영역 감지해서 이벤트 발생시키기 (19) | 2024.09.06 |
---|---|
[Thymeleaf 타임리프] ModelAndView 리턴페이지에서 특정 id 영역만 변경하고 싶을 때 (12) | 2024.09.05 |
[Mybatis] 반복되는 같은 쿼리 sql 로 정의해서 include 해서 변수처럼 사용하기 (3) | 2024.09.03 |
[Javascript] html 테이블을 엑셀 다운로드 하기 (2) | 2024.08.30 |
[타임리프] javascript 에서 타임리프 변수 사용하기 (0) | 2024.08.28 |