/**=========================================== * 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,JpaSpecificationExecutor { }
/**=========================================== * 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 * 操作原因: * */@Servicepublic class CloudCoverService { @Autowired private CloudCoverDao cloudCoverDao; public CloudCover saveCover(CloudCover cloudCover) { ListcloudCovers = 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 getWhereClause(final CloudCover cloudCover) { return new Specification () { @Override public Predicate toPredicate(Root r, CriteriaQuery q, CriteriaBuilder cb) { Predicate predicate = cb.conjunction(); if (cloudCover != null) { if (StringUtils.isNotBlank(cloudCover.getNetworkId())) { predicate.getExpressions().add(cb.equal(r. get("networkId"), StringUtils.trim(cloudCover.getNetworkId()))); } if (StringUtils.isNotBlank(cloudCover.getServiceOfferingsId())) { predicate.getExpressions().add(cb.equal(r. get("serviceOfferingsId"), StringUtils.trim(cloudCover.getServiceOfferingsId()))); } if (StringUtils.isNotBlank(cloudCover.getTemplateOfferingsId())) { predicate.getExpressions().add(cb.equal(r. get("templateOfferingsId"), StringUtils.trim(cloudCover.getTemplateOfferingsId()))); } if (StringUtils.isNotBlank(cloudCover.getZoneId())) { predicate.getExpressions().add(cb.equal(r. get("zoneId"), StringUtils.trim(cloudCover.getZoneId()))); } } return predicate; } }; }}
动态查询:1.实现JpaSpecificationExecutor接口;
2.new Specification 子类即可。