jpa batch批量操作save和persist比較


1.網上最常見的JPA----entityManager批量操作方法

    private EntityManager em;
    @PersistenceContext(name = "EntityManagerFactory")
    public void SetEntityManager(EntityManager em) {
        this.em = em;
    }
    @Transactional
    public void saveBatch(List<CustomerEntity> list) {
        for (int i = 0; i < 10000; i++) {
            em.persist(list.get(i));
            if (i % 1000 == 0) {
                em.flush();
                em.clear();
            }
        }
    }

2.Jpa--Repository批量寫入

    @Transactional
    public void saveBatchJpa(List<CustomerEntity> list) {
        repository.save(list);
    }

 

3.結論

EM和JPA直接操作集合沒有太大的性能區別,直接使用JPA操作集合即可。如下是JPA操作集合的代碼,可以看出起始內部也是用的em

  @Transactional
    public <S extends T> List<S> save(Iterable<S> entities) {
        List<S> result = new ArrayList<S>();
        if (entities == null) {
            return result;
        }
        for (S entity : entities) {
            result.add(save(entity));
        }
        return result;
    }
/*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
     */
    @Transactional
    public <S extends T> S save(S entity) {
        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM