BServiceImpl.java 3.28 KB
package com.bsth.service.schedule.impl;

import com.bsth.entity.search.CustomerSpecs;
import com.bsth.repository.BaseRepository;
import com.bsth.service.schedule.BService;
import com.bsth.service.schedule.ScheduleException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 基础BService实现。
 */
public class BServiceImpl<T, ID extends Serializable> implements BService<T, ID> {
    @Autowired
    private BaseRepository<T, ID> baseRepository;
    @Autowired
    private EntityManager entityManager;
    @Value("${hibernate.jdbc.batch_size}")
    private int batchSize;

    /** 日志记录器 */
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    // CRUD 操作
    // Create,Update操作
    @Override
    public T save(T t) {
        if (logger.isDebugEnabled()) {
            logger.debug("save...");
        }
        return baseRepository.save(t);
    }
    @Override
    public <S extends T> List<S> bulkSave(List<S> entities) {
        if (logger.isDebugEnabled()) {
            logger.debug("bulkSave...");
        }

        // 不使用内部批量保存,自己实现批量保存
        final List<S> savedEntities = new ArrayList<>(entities.size());
        int i = 0;
        for (S t : entities) {
            entityManager.persist(t);
            savedEntities.add(t);
            i++;
            if (i % batchSize == 0) {
                entityManager.flush();
                entityManager.clear();
            }
        }
        return savedEntities;
    }

    // Research操作
    @Override
    public T findById(ID id) {
        if (logger.isDebugEnabled()) {
            logger.debug("findById...");
        }

        return baseRepository.findOne(id);
    }
    @Override
    public List<T> findAll() {
        if (logger.isDebugEnabled()) {
            logger.debug("findAll...");
        }

        return (List<T>) baseRepository.findAll();
    }
    @Override
    public Page<T> list(Map<String, Object> param, Pageable pageable) {
        if (logger.isDebugEnabled()) {
            logger.debug("list(...,pageable)...");
        }

        // 自定义查询参数
        Specification<T> specification = new CustomerSpecs<>(param);
        return baseRepository.findAll(specification, pageable);
    }
    @Override
    public List<T> list(Map<String, Object> param) {
        if (logger.isDebugEnabled()) {
            logger.debug("list...");
        }

        // 自定义查询参数
        Specification<T> specification = new CustomerSpecs<>(param);
        return baseRepository.findAll(specification);
    }
    // Delete操作
    @Override
    public void delete(ID id) throws ScheduleException {
        if (logger.isDebugEnabled()) {
            logger.debug("delete...");
        }

        baseRepository.delete(id);
    }
}