1. 程式人生 > >Spring Data JPA動態查詢(多條件and)

Spring Data JPA動態查詢(多條件and)

ica cat 滿足 from pos true ans let tid

entity:

@Entity
@Table(name = "data_illustration")
public class Test {
    
    @Id
    @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
    @GeneratedValue(generator = "uuid")
    private String id;

    @Column(name = "fileId")
    private String fileid;

    
private String title; @Column(name = "WFState") private String wfstate; @Column(name = "issueNo") private String issueno; private String format; //對應得set、get方法省略 }

mapper:

public interface IllustrationMapper extends JpaRepository<Test, String> {
    @Transactional
    @Modifying
    @Query(value
="delete from test where id=?1 ",nativeQuery=true) int deleteByPrimaryKey(String id); List<Test> findAll(Specification<CsdbDataIllustration> specification); //傳入Specification對象 }

service:

public List<Test > getDataIllustrationList(Test test) {
        List
<Test > test2 = dataIllustrationMapper.findAll(new Specification<Test >(){ @Override public Predicate toPredicate(Root<Test > root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); if(StringUtils.isNotBlank(test.getId())){ predicates.add(cb.equal(root.get("id"), test.getId())); } if(StringUtils.isNotBlank(test.getFileid())){ predicates.add(cb.equal(root.get("fileid"), test.getFileid() )); } if(StringUtils.isNotBlank(test.getTitle())){ predicates.add(cb.equal(root.get("title"), test.getTitle() )); } if(StringUtils.isNotBlank(test.getWfstate())){ predicates.add(cb.equal(root.get("wfstate"), test.getWfstate() )); } if(StringUtils.isNotBlank(test.getIssueno())){ predicates.add(cb.equal(root.get("issueno"), test.getIssueno() )); } if(StringUtils.isNotBlank(test.getFormat())){ predicates.add(cb.equal(root.get("format"), test.getFormat() )); } return cb.and(predicates.toArray(new Predicate[predicates.size()])); //將上面滿足條件的項用and拼接起                                                    //來進行查詢,當然此處也可以改為or或者like等等,視情況而定 } }); return test2; }

Spring Data JPA動態查詢(多條件and)