oracle数据批量插入

插入sql


		insert into TEMP_ZW_INPUT
		(  GUIDENUM,PHONE, GETTYPE,
		PROVINCE, CITY, HAODUAN,
		SERIALNO)
		
			select #{it.guidenum},#{it.phone},#{it.gettype},
			#{it.province},#{it.city},#{it.haoduan},
			#{it.serialno} from dual
		
	

分批处理工具类

/**  
 * @Title:  DBUtils.java   
 * @Package sinosoft.platform.utils   
 * @Description:   
 * @author: lhw
 * @date:   2019年9月20日 上午10:06:41    
 */
package sinosoft.platform.utils;

import java.lang.reflect.Method;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DBUtils {

	private static Logger logger = LoggerFactory.getLogger(DBUtils.class);

	/**
	 * 对于大量数据的插入操作进行分批处理节约时间 pagesize越大,插入越快 自己随便通过数据库测一下那个字段能用多大是最佳的
	 * 
	 * @param type
	 *            实例class
	 * @param pageSize
	 *            分页大小
	 * @param list
	 *            实例的集合
	 */
	public static void batchProcess(Class serviceType, int pageSize, List list) throws Exception {

		long start_time = System.currentTimeMillis();// 开始执行时间

		// 分批数据信息
		int totalSize = list.size(); // 总记录数
		int totalPage = totalSize / pageSize; // 共N页

		if (totalSize % pageSize != 0) {
			totalPage += 1;
			if (totalSize < pageSize) {
				pageSize = list.size();
			}
		}

		for (int pageNum = 1; pageNum < totalPage + 1; pageNum++) {
			int starNum = (pageNum - 1) * pageSize;
			int endNum = pageNum * pageSize > totalSize ? (totalSize) : pageNum * pageSize;
			Method insertForeach = serviceType.getMethod("insertForeach", List.class);
			insertForeach.invoke(list.subList(starNum, endNum));
		}

		logger.info("本次操作共耗时:" + (System.currentTimeMillis() - start_time) / 1000 + "秒,约"
				+ (System.currentTimeMillis() - start_time) / 60000 + "分钟");

	}

}

你可能感兴趣的:(oracle)