MyBatis写入大量数据
1. Servcie
public void insertBatch(List<ExtendedAreaSucharge> extendedAreaSucharges) { int groupSize = 500; int groupNo = extendedAreaSucharges.size() / groupSize; if (extendedAreaSucharges.size() <= groupSize) { extendedAreaSuchargeDao.saveBatch(extendedAreaSucharges); } else { List<ExtendedAreaSucharge> subList = null; for (int i = 0; i < groupNo; i++) { subList = extendedAreaSucharges.subList(0, groupSize); extendedAreaSuchargeDao.saveBatch(subList); extendedAreaSucharges.subList(0, groupSize).clear(); } if (extendedAreaSucharges.size() > 0) { extendedAreaSuchargeDao.saveBatch(extendedAreaSucharges); } } }
2. Mapper.java
@Mapper public interface ExtendedAreaSuchargeDao { void saveBatch(@Param("extendedAreaSuchargeList") List<ExtendedAreaSucharge> extendedAreaSuchargeList); }
3. Mapper.xml
<sql id="keyBatch"> id,organization_id,version,calc_type,country_code,country_name,covert,kg_price,logistics_supplier_item_id,logistics_supplier_item_name,min_charge,no_zero_length,number_code,original_desc,post_code,post_code_end,post_code_start,post_code_type,prefix,post_code_end4char,post_code_start4char </sql> <sql id="valueBatch"> #{item.id},#{item.organizationId},#{item.version},#{item.calcType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},#{item.countryCode},#{item.countryName},#{item.covert},#{item.kgPrice},#{item.logisticsSupplierItemId},#{item.logisticsSupplierItemName},#{item.minCharge},#{item.noZeroLength},#{item.numberCode},#{item.originalDesc},#{item.postCode},#{item.postCodeEnd},#{item.postCodeStart},#{item.postCodeType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},#{item.prefix},#{item.postCodeEnd4Char},#{item.postCodeStart4Char} </sql> <insert id="saveBatch"> INSERT INTO surc_extended_area_sucharge (<include refid="keyBatch"/>) values <foreach collection="extendedAreaSuchargeList" item="item" index="index" separator=","> (<include refid="valueBatch"/>) </foreach> </insert>