List数据批量插入Oracle数据库很高效的方法
转载自 https://blog.youkuaiyun.com/java_peak_zlf/article/details/88189807
方法介绍
- 采用分批插入的方法,将List集合拆分然后进行分批插入。
Controller层
private static final int OPENID_PHONE_NUM = 800; //经实践,800一批插入相对较快,这个可以随便定义
private void insertPMeSendToPhoneInfo(List<PMeSendToPhone> phoneList){
int listSize=phoneList.size();
int toIndex=OPENID_PHONE_NUM;
for(int i = 0;i<phoneList.size();i+=OPENID_PHONE_NUM){
if(i+OPENID_PHONE_NUM>listSize){//作用为toIndex最后没有800条数据则剩余几条newList中就装几条
toIndex=listSize-i;
}
List<PMeSendToPhone> newPMeSendToPhoneInfo = phoneList.subList(i,i+toIndex);
//批量插入
pMeSendToPhoneMapper.batchInsertPMePhoneData(newPMeSendToPhoneInfo);
}
}
接口mapper层定以
/** 接口方法定义
*批量插入
* @param newPMeSendToPhoneInfo
* @return
*/
int batchInsertPMePhoneData(@Param(value = "list") List<PMeSendToPhone> newPMeSendToPhoneInfo);
Mybatis层
<insert id="batchInsertPMePhoneData" parameterType="java.util.List">
begin
<foreach collection="list" item="item" index="index">
insert into P_ME_SEND_TO_PHONE (PHONEID, PHONE, OPENID, EXTEND_1,EXTEND_2, EXTEND_3)
values(
SEQ_P_ME_SEND_TO_PHONE.nextval,
#{item.phone,jdbcType=VARCHAR},
#{item.openid,jdbcType=VARCHAR},
#{item.extend1,jdbcType=VARCHAR},
#{item.extend2,jdbcType=VARCHAR},
#{item.extend3,jdbcType=VARCHAR}
);
</foreach>
end;
</insert>