Mybatis向oracle数据库批量新增和修改时遇到的问题

写了一个批量新增的方法:

           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 函数

猜你喜欢

转载自blog.csdn.net/admin123404/article/details/107207125