Java-Jpa扩展-批量操作
1.批量操作类定义
import java.util.List; /** * 批量操作接口 */ public interface IBatchService { /** * 批量更新 * * @param list 实体类集合 * @param <T> 表对应的实体类 */ public <T> void batchUpdate(List<T> list); /** * 批量插入 * * @param list 实体类集合 * @param <T> 表对应的实体类 */ public <T> void batchInsert(List<T> list); }
批量操作接口实现:
import com.tjgeo.njsosms.system.service.IBatchService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; /** * 批量操作接口实现 */ @Service @Transactional public class BatchService implements IBatchService { @PersistenceContext private EntityManager entityManager; //配置文件中每次批量提交的数量 @Value("${spring.jpa.properties.hibernate.jdbc.batch_size}") private long batchSize; /** * 批量插入 * * @param list 实体类集合 * @param <T> 表对应的实体类 */ @Override public <T> void batchInsert(List<T> list) { if (!ObjectUtils.isEmpty(list)){ for (int i = 0; i < list.size(); i++) { entityManager.persist(list.get(i)); if (i % batchSize == 0) { entityManager.flush(); entityManager.clear(); } } entityManager.flush(); entityManager.clear(); } } /** * 批量更新 * * @param list 实体类集合 * @param <T> 表对应的实体类 */ @Override public <T> void batchUpdate(List<T> list) { if (!ObjectUtils.isEmpty(list)){ for (int i = 0; i < list.size(); i++) { entityManager.merge(list.get(i)); if (i % batchSize == 0) { entityManager.flush(); entityManager.clear(); } } entityManager.flush(); entityManager.clear(); } } }
用法:
List<SysUserPost> tgDeleUserPost=Lists.newArrayList(); List<SysUserPost> tgNewUserPost=Lists.newArrayList(); //删除旧岗位 if(tgDeleUserPost.size()>0) { // userPostRepository.saveAll(tgDeleUserPost); batchService.batchUpdate(tgDeleUserPost); } //新增新岗位 if(tgNewUserPost.size()>0) { // userPostRepository.saveAll(tgNewUserPost); batchService.batchInsert(tgNewUserPost); }