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

 

実行後、エラーが報告されました:

マッパーメソッド '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> 

 

 

ps:これはOracleデータベースであるため、now()関数は新規および変更された時間フィールドに使用できませんそのため、sysdate関数が記述されています。

おすすめ

転載: blog.csdn.net/admin123404/article/details/107207125