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接口;

                    2.new Specification 子类即可。

转载于:https://my.oschina.net/u/217398/blog/676712

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简单的 Spring Boot + JPA + Hibernate 配置实例,步骤如下: 1. 在 `pom.xml` 中添加以下依赖: ```xml <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Spring Boot Starter Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Hibernate Entity Manager --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.4.32.Final</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ``` 2. 在 `application.properties` 中配置数据源和 JPA 相关属性: ```properties # 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 # JPA 配置 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect ``` 3. 创建实体类,例如: ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "age") private Integer age; // 省略 getter 和 setter } ``` 4. 创建 Repository 接口,例如: ```java public interface UserRepository extends JpaRepository<User, Long> { List<User> findByName(String name); } ``` 5. 创建 Service 类,例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> findByName(String name) { return userRepository.findByName(name); } public User save(User user) { return userRepository.save(user); } public void deleteById(Long id) { userRepository.deleteById(id); } } ``` 6. 创建 Controller 类,例如: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{name}") public List<User> findByName(@PathVariable("name") String name) { return userService.findByName(name); } @PostMapping public User save(@RequestBody User user) { return userService.save(user); } @DeleteMapping("/{id}") public void deleteById(@PathVariable("id") Long id) { userService.deleteById(id); } } ``` 这样就完成了 Spring Boot + JPA + Hibernate 的配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值