/**===========================================
* 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接口;
2.new Specification 子类即可。