批量插入
第一种方式:
Oracle中可以使用java中的for循环逐条插入数据库,但是这种效率比较低,不适合一次性插入大量的数据,所以可以利用Oracle中的“dual”表实现批量处理,并且效率高。
示例:
- 接口方法:
/**
* 批量同步短信记录
* @param syncMsgDTOList
* @return int
*/
int insertSyncMsgBatch(List<SyncMsgDTO> syncMsgDTOList);
- mapper.xml文件:
<insert id="insertSyncMsgBatch">
insert into doc( CREDATE, COMEFROM, CALLNO, CALLOWNER, MSG, SOURCEID
, SENDERID, SENDDEPTID, SENDDATE, USESTATUS, MEMO, SYNCFLAG)
<foreach collection="list" open="(" close=")" item="syncMsgDTO" index="index" separator="union all">
select
#{syncMsgDTO.creDate},
#{syncMsgDTO.comeFrom},
#{syncMsgDTO.callNo},
#{syncMsgDTO.callOwner},
#{syncMsgDTO.msg},
#{syncMsgDTO.sourceId},
#{syncMsgDTO.senderId},
#{syncMsgDTO.sendDeptId},
#{syncMsgDTO.sendDate},
#{syncMsgDTO.userStatus},
#{syncMsgDTO.memo},
#{syncMsgDTO.syncFlag}
from dual
</foreach>
</insert>
第二种方式:
- mapper.xml
<insert id="insertorUpdateLastPrice" parameterType="list">
INSERT INTO lastsell (ERP_LASTPRICE_ID,ORG_CODE, COMPAY_NAME, PRODUCT_CODE, ERP_CODE, LATEST_SALES_PRICE,
SYNC_FLAG, CREATE_USER_ID, CREATE_TIME, UPDATE_USER_ID, UPDATE_TIME)
<foreach open="values(" separator="),(" collection="list"
item="item" close=")">
#{item.id},
#{item.org_code},
#{item.org_name},
#{item.material_code},
#{item.customer_code},
#{item.latest_salePrice},
'0',
'1',
date(#{item.creation_time}),
'1',
date(#{item.modified_time})
</foreach>
</insert>
批量更新
- 接口方法:
int batchDeleteData(@Param("ids") String[] ids);
- mapper.xml文件
<update id="batchDeleteData">
update TZ_XJLT_PARTNER set STATUS='0' where ID in
<if test="ids!=null">
<foreach collection="ids" open="(" close=")" separator=","
item="id">
#{id}
</foreach>
</if>
</update>
评论前必须登录!
注册