写了一个批量新增的方法:
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
之后执行又报错:
Mapper method 'xxx' has an unsupported return type
出现这种错误,说明sql语句执行成功,只是返回类型出了问题。
解决方法:
insert、delete、update操作默认返回一个int类型的整数,将增删改的接口改成int或者void即可。
select操作返回的类型可以是自定义的Map或者是List
改下返回值类型就好了。
之后写了批量修改:
<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>
ps:因为是Oracle数据库,新增、修改 用到的时间字段不能用 now()函数,所以就写了sysdate 函数。