springboot jpa hibernate 實現動態查詢

 

/**===========================================
 *        Copyright (C) 2016 PinganYun
 *           All rights reserved
 *
 *  項 目 名: pacloud-test
 *  文 件 名: CloudCoverDao.java
 *  版本信息: V1.0.0 
 *  做    者: ZHANGYIMING417
 *  日    期: 2016年5月17日-上午11:29:46
 * 
 ============================================*/

package cn.com.paic.pacloud.cloudtest.repository;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

import cn.com.paic.pacloud.cloudtest.domain.CloudCover;

/**
 * 類 名 稱: CloudCoverDao
 * 類 描 述: 
 * 創 建 人: ZHANGYIMING417
 * 建立時間: 2016年5月17日 上午11:29:46
 *
 * 修 改 人: ZHANGYIMING417
 * 操做時間: 2016年5月17日 上午11:29:46
 * 操做緣由: 
 * 
 */
public interface CloudCoverDao extends PagingAndSortingRepository<CloudCover, Long>,JpaSpecificationExecutor<CloudCover> {

    

    
}
/**===========================================
 *        Copyright (C) 2016 PinganYun
 *           All rights reserved
 *
 *  項 目 名: pacloud-test
 *  文 件 名: CloudCoverService.java
 *  版本信息: V1.0.0 
 *  做    者: ZHANGYIMING417
 *  日    期: 2016年5月17日-下午1:55:40
 * 
 ============================================*/

package cn.com.paic.pacloud.cloudtest.service;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.domain.Specifications;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import cn.com.paic.pacloud.cloudtest.domain.CloudCover;
import cn.com.paic.pacloud.cloudtest.repository.CloudCoverDao;

/**
 * 類 名 稱: CloudCoverService
 * 類 描 述: 
 * 創 建 人: ZHANGYIMING417
 * 建立時間: 2016年5月17日 下午1:55:40
 *
 * 修 改 人: ZHANGYIMING417
 * 操做時間: 2016年5月17日 下午1:55:40
 * 操做緣由: 
 * 
 */
@Service
public class CloudCoverService {

    @Autowired
    private CloudCoverDao cloudCoverDao;

    public CloudCover saveCover(CloudCover cloudCover) {
        List<CloudCover> cloudCovers = cloudCoverDao.findAll(Specifications.where(getWhereClause(cloudCover)));
        if (!CollectionUtils.isEmpty(cloudCovers) && cloudCovers.size() > 0) {
            return cloudCovers.get(0);
        }
        return cloudCoverDao.save(cloudCover);
    }

    /**
     * 方法描述:  組合多條件查詢
     * 做    者: ZHANGYIMING417
     * 日    期: 2016年5月17日-下午1:59:54
     * @param cloudCover
     * @return 
     * 返回類型: Object
    */
    private Specification<CloudCover> getWhereClause(final CloudCover cloudCover) {
        return new Specification<CloudCover>() {
            @Override
            public Predicate toPredicate(Root<CloudCover> r, CriteriaQuery<?> q, CriteriaBuilder cb) {
                Predicate predicate = cb.conjunction();
                if (cloudCover != null) {
                    if (StringUtils.isNotBlank(cloudCover.getNetworkId())) {
                        predicate.getExpressions().add(cb.equal(r.<String> get("networkId"), StringUtils.trim(cloudCover.getNetworkId())));
                    }
                    if (StringUtils.isNotBlank(cloudCover.getServiceOfferingsId())) {
                        predicate.getExpressions().add(cb.equal(r.<String> get("serviceOfferingsId"), StringUtils.trim(cloudCover.getServiceOfferingsId())));
                    }
                    if (StringUtils.isNotBlank(cloudCover.getTemplateOfferingsId())) {
                        predicate.getExpressions().add(cb.equal(r.<String> get("templateOfferingsId"), StringUtils.trim(cloudCover.getTemplateOfferingsId())));
                    }
                    if (StringUtils.isNotBlank(cloudCover.getZoneId())) {
                        predicate.getExpressions().add(cb.equal(r.<String> get("zoneId"), StringUtils.trim(cloudCover.getZoneId())));
                    }
                }
                return predicate;
            }
        };
    }

}

 

動態查詢:1.實現JpaSpecificationExecutor接口;java

                    2.new Specification 子類便可。spring

相關文章
相關標籤/搜索