public interface CloudCoverDao extends PagingAndSortingRepository<CloudCover, Long>,JpaSpecificationExecutor<CloudCover> { }
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; @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.Dao 接口 實現JpaSpecificationExecutor接口;java
2.Service層 組織 new Specification 子類便可。spring