[최종프로젝트] 방금 Insert한 기본키(primary key)가져오기

1. xml파일

insert에서 useGeneratedKeys 속성을 true로 변경, keyColumn="prchsId" keyProperty="prchsId" 적용해준다.

SQL_.xml

<!-- 매입발주서 등록 -->
<insert id="insertPrchs" parameterType="prchsVO" useGeneratedKeys="true" keyColumn="prchsId" keyProperty="prchsId">
	<selectKey order="BEFORE" keyProperty="prchsId" resultType="string">
		SELECT 'PRCHS' || LPAD(NVL(MAX(TO_NUMBER(SUBSTR(NVL(PRCHS_ID, 'PRCHS00001'),6))),0)+1,5,'0') FROM PRCHS
	</selectKey>
	INSERT INTO PRCHS ( 
		PRCHS_ID, 
		PRCHS_DT, 
		PRCHS_AMT, 
		CNPT_ID, 
		PRCHS_SE 
	)
	VALUES (
	    #{prchsId}, 
	    #{prchsDt},
	    #{prchsAmt},
	    #{cnptId},
	    '저장'
	)
	
</insert>

2. serviceImpl

serviceImpl에서 insert 시 VO객체를 파라미터로 넘겨서 insert 처리를 한다.
그 후, return값으로 그 VO의 Id값이 저장되어 return 된다.

	//매입발주서 작성 - 된다~!!!!!!!!!!!!!!!!!!!!
	@Override
	public int insertPrchs(PrchsVO prchsVO) {
		//insert
		prchsMapper.insertPrchs(prchsVO);
		
		logger.info("prchsVO : {}",prchsVO);
		String prchsId = prchsVO.getPrchsId();
		
		logger.info("아이디 잘드러완는지,,  : " + prchsId);
		
		//결과 담을 변수
		int result = 0; 
		
		//매입상품 insert하기
		for(PrchsGdsVO vo : prchsVO.getPrchsGdsVO()) {
			//매입상품 하나씩 꺼내서 insert
			vo.setPrchsId(prchsId);
			//매입상품 insert
			result += prchsMapper.insertPrchsGds(vo);
		}
		
		return result;
	}

아래처럼 logger로 Id를 찍으면 원래 null값이었던 Id가 저장되어 출력된다.

		logger.info("prchsVO : {}",prchsVO);
		String prchsId = prchsVO.getPrchsId();

		logger.info("아이디 잘드러완는지,,  : " + prchsId);

좋은 웹페이지 즐겨찾기