ps:因为批量导入时oracle不能动态获取序列,因此只能通过这种BATCH批量导入;
直接上代码先:
public int addCustInfoes(List<CustInfo> list) throws Exception {
SqlSession sqlSession = this.sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
int num =0;
try{
for(CustInfo cust:list){
sqlSession.insert("com.kinglo.promotion.pojo.CustInfo.addCustInfo", cust);
num++;
if(num%1000 ==0){
sqlSession.clearCache();
sqlSession.commit();
}
}
sqlSession.clearCache();
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
throw new Exception(e);
}
sqlSession.close();
return num;
}
ps: openSession方法中有两个参数,第一个参数代表执行方式:
ExecutorType有三个值:
- ExecutorType.SIMPLE 它会为每个语句的执行创建一个新的预处理语句
- ExecutorType.REUSE 它会复用预处理语句
- ExecutorType.BATCH 这个执行器会批量执行sql语句
第二个false代表不自动提交,因此我们这里通过判断1000条后手动提交:sqlSession.commit();