實測可用-Spring Boot使用JPA多條件查詢mysql

package com.biologic.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name= "t_quality_inspection")
public class QualityCheck {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String version;
    private Date upload_time;
    private int qualified;
    private int released;
    private int processed;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public Date getUpload_time() {
        return upload_time;
    }
    public void setUpload_time(Date upload_time) {
        this.upload_time = upload_time;
    }
    public int getQualified() {
        return qualified;
    }
    public void setQualified(int qualified) {
        this.qualified = qualified;
    }
    public int getReleased() {
        return released;
    }
    public void setReleased(int released) {
        this.released = released;
    }
    public int getProcessed() {
        return processed;
    }
    public void setProcessed(int processed) {
        this.processed = processed;
    }

}
package com.biologic.api.service;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Service;

import com.biologic.entity.QualityCheck;


@Service
public interface QualityCheckRepository extends JpaRepository<QualityCheck, Long>, JpaSpecificationExecutor<QualityCheck> { 
}
package com.biologic.api;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

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

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.biologic.api.service.QualityCheckRepository;
import com.biologic.entity.QualityCheck;


@Controller
@RequestMapping(path = "/demo")
public class QualityCheckController {


    @Autowired
    private QualityCheckRepository qualityCheckRepository;


    @GetMapping(path = "/qualityCheck")
    public @ResponseBody String qualityCheck() {
        QualityCheck model = new QualityCheck();
        model.setQualified(1);
        model.setProcessed(0);
        List<QualityCheck> results = findSearch(model);
        for (QualityCheck qualityCheck : results) {
            System.out.println("正在質檢:" + qualityCheck.getId()); 
                qualityCheck.setProcessed(1);
            qualityCheckRepository.save(qualityCheck);      
        }       
        return "ok";
    }



    public List<QualityCheck> findSearch(QualityCheck model) {

        List<QualityCheck> result = qualityCheckRepository.findAll(new Specification<QualityCheck>() {
            @Override
            public Predicate toPredicate(Root<QualityCheck> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                List<Predicate> list = new ArrayList<Predicate>();

                list.add(cb.equal(root.get("qualified").as(Integer.class), model.getQualified()));

                list.add(cb.equal(root.get("processed").as(Integer.class), model.getProcessed()));

                if (model.getVersion() != null && !model.getVersion().equals("")) {
                    list.add(cb.equal(root.get("version").as(String.class), model.getVersion()));
                }

                if (model.getVersion() != null && !model.getVersion().equals("")) {
                    list.add(cb.like(root.get("version").as(String.class), "%" + model.getVersion() + "%"));
                }

                // 日期
                if (model.getUpload_time() != null) {
                    Date startDate = model.getUpload_time();
                    Date endDate = new Date();
                    list.add(cb.between(root.<Date>get("upload_time"), startDate, endDate));
                }
                Predicate[] p = new Predicate[list.size()];
                return cb.and(list.toArray(p));
            }

        });

        return result;
    }
}

參考鏈接:https://blog.csdn.net/zzq900503/article/details/81104220###

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章