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);
        }

 

posted @ 2024-02-28 13:32  李文学  阅读(160)  评论(0)    收藏  举报