save()方法
@Transactional
public <S extends T> S save(S entity) {
if (this.entityInformation.isNew(entity)) {
this.em.persist(entity);
return entity;
} else {
return this.em.merge(entity);
根据源码我们可以看出来,save是先通过判断这个对象是不是新的,新的便会新增,否则就是执行的修改。整个是有分两步进行的,先查询再新增
saveAll()方法
@Transactional
public <S extends T> List<S> saveAll(Iterable<S> entities) {
Assert.notNull(entities, "The given Iterable of entities not be null!");
List<S> result = new ArrayList();
Iterator var3 = entities.iterator();
while(var3.hasNext()) {
S entity = var3.next();
result.add(this.save(entity));
return result;
saveAll()方法是一种更新多条的一种方式,里面传的存对象的集合。分析源码我们可以看出saveAll()底层还是调用的save()方法,也就是每次需要先查询再做修改。在使用上方便,但是因每次涉及到查询、新增,事务的关系,导致修改或者新增耗时得非常的久。
那么下面我们将结合EntityManager对批量新增,修改做出优化。