일괄 추가 방법을 작성했습니다.
INSERT INTO CRD_SUBSIDY_AMOUNT (
id,
DELETED,
CREATED_BY,
CREATED_DATE,
ORGANIZATION_ID,
REMARK,
SUBSIDY_GRANT_AMT,
MONTH_OF_YEAR,
SURPLUS_AMT,
USED_AMT,
AMOUNT_ID,
ALLOW_USED_SUBSIDY_AMT,
STAFF_ID,
STAFF_NAME
)
VALUES
<foreach collection='subsidyAmounts' item='item' index='index' separator=','>
(
#{ item.id },
#{ item.del },
#{ item.createdBy },
#{ item.createdDate },
#{ item.organizationId },
#{ item.remark } ,
#{ item.subsidyGrantAmt },
#{ item.monthOfYear },
#{ item.surplusAmt },
#{ item.usedAmt },
#{ item.amountId },
#{ item.allowUsedSubsidyAmt },
#{ item.staffId },
#{ item.staffName }
)
</foreach>
실행 중 이유없이 오류보고
SQL이 올바르게 종료되지 않았다고 가정하십시오.
나중에 이것이 Mysql 용 SQL이라는 것을 알았습니다.
그래서 SQL을 변경했습니다.
INSERT INTO CRD_SUBSIDY_AMOUNT (
id,
DELETED,
CREATED_BY,
CREATED_DATE,
ORGANIZATION_ID,
REMARK,
SUBSIDY_GRANT_AMT,
MONTH_OF_YEAR,
SURPLUS_AMT,
USED_AMT,
AMOUNT_ID,
ALLOW_USED_SUBSIDY_AMT,
STAFF_ID,
STAFF_NAME
)
SELECT A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{ item.id,jdbcType=VARCHAR } id,
#{ item.del ,jdbcType=NUMBER} DELETED,
#{ item.createdBy,jdbcType=VARCHAR } CREATED_BY,
#{ item.createdDate,jdbcType=TIMESTAMP} CREATED_DATE,
#{ item.organizationId,jdbcType=VARCHAR } ORGANIZATION_ID,
#{ item.remark,jdbcType=VARCHAR } REMARK,
#{ item.subsidyGrantAmt,jdbcType=VARCHAR } SUBSIDY_GRANT_AMT,
#{ item.monthOfYear,jdbcType=VARCHAR } MONTH_OF_YEAR,
#{ item.surplusAmt ,jdbcType=VARCHAR} SURPLUS_AMT,
#{ item.usedAmt,jdbcType=VARCHAR } USED_AMT,
#{ item.amountId ,jdbcType=VARCHAR} AMOUNT_ID,
#{ item.allowUsedSubsidyAmt,jdbcType=VARCHAR } ALLOW_USED_SUBSIDY_AMT,
#{ item.staffId,jdbcType=VARCHAR } STAFF_ID,
#{ item.staffName,jdbcType=VARCHAR } STAFF_NAME
FROM dual
</foreach>
)A
실행 후 오류가보고되었습니다.
매퍼 메서드 'xxx'에 지원되지 않는 반환 유형이 있습니다.
이러한 종류의 오류는 SQL 문이 성공적으로 실행되었지만 반환 유형이 잘못되었음을 나타냅니다.
해결책:
삽입, 삭제 및 업데이트 작업은 기본적으로 int 유형의 정수를 반환하며 추가, 삭제 및 수정을위한 인터페이스를 int 또는 void로 변경할 수 있습니다.
선택 작업에 의해 반환되는 유형은 사용자 지정지도 또는 목록 일 수 있습니다.
반환 값 유형을 변경하십시오.
그 후 일괄 수정을 작성했습니다.
<foreach collection='list' item='item' index='index' open='begin'
close=';end;' separator=';'>
update CRD_SUBSIDY_AMOUNT t
set
t.ALLOW_USED_SUBSIDY_AMT=#{item.allowUsedSubsidyAmt},
t.LAST_MODIFIED_BY='system',
t.LAST_MODIFIED_DATE=sysdate
where t.STAFF_ID = #{item.staffId}
</foreach>
추신 : Oracle 데이터베이스이기 때문에 now () 함수 는 새로운 시간 필드와 수정 된 시간 필드에 사용할 수 없으므로 sysdate 함수 가 작성 됩니다.