DataBase/JOOQ

[JOOQ] insert Step으로 편리하게 insert 하자.

PCOSPD 100LRE SCRIE4A2 2021. 1. 14. 12:32

- 전체값을 일반적인 insert 문으로 삽입한 경우.

// 일반적인 insert 문의 경우.
if (dto.getItemList() != null) {
	for (PromotionItemDTO item : dto.getItemList()) {
    	DSL.insertInto(PROMOTION_REGISTER_ITEM)
        	.set(PROMOTION_ITEM.REGISTER_ID,
            	DSL.select(PROMOTION_REGISTER_ITEM.ID).from(
                	PROMOTION_REGISTER_ITEM)
                    .where(PROMOTION_REGISTER_ITEM.FILE_KEY.eq(dto.getFileKey()))
               		.orderBy(PROMOTION_REGISTER_ITEM.ID.desc()).limit(1)
                    .fetchOneInto(Integer.class))
            .set(PROMOTION_REGISTER_ITEM.ITEM_CODE, item.getItemCode())
            .set(PROMOTION_REGISTER_ITEM.VALUE, item.getValue())
            .set(PROMOTION_REGISTER_ITEM.IS_FREE, item.isFree() ? (byte) 1 : (byte) 0)
            .execute();
    }
}

- insert Step을 사용하여 insert 컬럼을 분기처리 하고, 한방에 execute() 한 경우.

// insertStep으로 조건에 따라 insert 컬럼을 다르게 지정한 경우.
if (dto.getItemList() != null) {
	for (PromotionItem item : dto.getItemList()) {
    	InsertSetMoreStep<PromotionRecord> insertStep = 
        	DSL.insertInto(PROMOTION_REGISTER_ITEM)
            	.set(PROMOTION_REGISTER_ITEM.ID, dto.getItemId())
                .set(PROMOTION_REGISTER_ITEM.CREATED_AT,Timestamp.valueOf(LocalDateTime.now()));
    }
	
    if (dto.getPurchaseType() == SALES) {
    	insertStep.set(PROMOTION_REGISTER_ITEM.CALCULATE_TYPE, item.getCalculateType())
        		.set(PROMOTION_REGISTER_ITEM.PROMOTION_TYPE, PromotionType.SALES);
    }
    
    if (dto.getSettlementType() == MONTHLY) {
    	insertStep.set(PROMOTION_REGISTER_ITEM.CALCULATE_TYPE, item.getCalculateType())
        		.set(PROMOTION_REGISTER_ITEM.PROMOTION_TYPE, PromotionType.SALES);
    }
    
    insertStep.execute();
}