JAVA 批量插入数据

提供一份批量插入数据代码给网友用用

package co.dc.saas.stockdata.util;

import co.dc.saas.commons.base.BaseDao;
import co.dc.saas.commons.base.BasePo;
import co.dc.saas.commons.utils.PoDefaultUitls;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 批量保存数据
 * 
 * @author Jerry
 *
 */
@Slf4j
@Component
public class BatchSaveUtils {
	// 事务提交数量
	private static final int COMMIT_NUM = 20000;

	@Autowired
	private SqlSessionFactory sqlSessionFactory;

	public <M extends BaseDao<T>, T extends BasePo> void batchSave(List<T> list, Class<M> clazz) {
		long startTime = System.currentTimeMillis();
		/* 关闭自动提交事务 */
		SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
		// 通过新的session获取mapper
		M m = session.getMapper(clazz);
		try {
			for (int i = 0; i < list.size(); i++) {
				T t = list.get(i);
				// 设置ID等字段
				PoDefaultUitls.saveDefault(t);

				m.insert(t);
				if (i > 0 && i % COMMIT_NUM == 0) {
					session.commit();
					session.clearCache();
				}
			}
			session.commit();
		} catch (Exception e) {
			session.rollback();
			e.printStackTrace();
		} finally {
			session.close();
			log.info("批量保存数据耗時:" + (System.currentTimeMillis() - startTime) + " ms");
		}
	}
	
	public <M extends BaseDao<T>, T extends BasePo> void batchUpdate(List<T> list, Class<M> clazz) {
		long startTime = System.currentTimeMillis();
		/* 关闭自动提交事务 */
		SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
		// 通过新的session获取mapper
		M m = session.getMapper(clazz);
		try {
			for (int i = 0; i < list.size(); i++) {
				m.updateByPrimaryKey(list.get(i));
				if (i > 0 && i % COMMIT_NUM == 0) {
					session.commit();
					session.clearCache();
				}
			}
			session.commit();
		} catch (Exception e) {
			session.rollback();
			e.printStackTrace();
		} finally {
			session.close();
			log.info("批量更新数据耗時:" + (System.currentTimeMillis() - startTime) + " ms");
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值