批量插入数据
/**
* 批量插入数据
* @param list 数据集合
* @param namespace mapperName + sqlId
*/
public void insertBatch(List<?> list,String namespace) {
// 新获取一个模式为BATCH,自动提交为false的session
// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = this.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
try {
if(null != list || list.size() > 0){
int lsize = list.size();
for (int i = 0, i <lsize; i++) {
Object object = list.get(i);
//session.insert("com.xx.mapper.XXXMapper.insert",XXX);
session.insert(namespace,object);
if ((i>0 && i % 100 == 0) || i == lsize - 1) {
// 手动每100个一提交,提交后无法回滚
session.commit();
// 清理缓存,防止溢出
session.clearCache();
}
}
}
} catch (Exception e) {
e.printStackTrace();
// 没有提交的数据可以回滚
session.rollback();
throw new BusinessException("批量插入数据出错!");
} finally {
session.close();
}
}
批量更新数据
/**
* 批量更新数据
* @param list 需要更新的list
* @param namespace mapperName + sqlId
*/
public void updateBatch(List<?> list,String namespace) {
SqlSession session = this.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
try {
if(null != list || list.size() > 0){
int lsize = list.size();
for (int i = 0,i < lsize; i++) {
Object object = list.get(i);
session.update(namespace,object);
if ((i>0 && i % 100 == 0) || i == lsize - 1) {
// 手动每100个一提交,提交后无法回滚
session.commit();
// 清理缓存,防止溢出
session.clearCache();
}
}
}
} catch (Exception e) {
// 没有提交的数据可以回滚
session.rollback();
throw new BusinessException("批量更新数据出错!");
} finally {
session.close();
}
}
批量插入调用
List<Student> addStudent = new ArrayList<>();
Student student1 = new Student();
Student student2 = new Student();
student1.setName("赵");
student1.setSex("男");
student1.setAgr(18);
student2.setName("钱");
student2.setSex("女");
student2.setAgr(18);
Collections.addAll(addStudent ,student1 , student2);
insertBatch(addStudent,"com.xxxxx.mapper.add");
批量修改调用
List<Student> studentList = getAllStudent();
studentList.forEach(student-> {
student.setAge(19);
});
updateBatch(studentList ,"com.xxxxx.mapper.update");