• Spring Data JPA动态查询(多条件and)


    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;
        }
  • 相关阅读:
    图解 Cisco IOS 命名规范
    2008北京奥运会足球赛程(男足)
    使用VPC在dynamips环境中模拟PC
    转:MSN反监听及其信息加密技巧!
    活动目录中用户和联系人有变化,但是outlook中的全局地址薄没有反映当前变化
    IE7 的安全警告
    exchange 路由组,管理组,存储组
    中式与西式网页设计的差别http://www.backboneitgroup.com/chinasearchdifferences.htm
    非常清晰的Cisco PIX Syslog 配置说明
    采用Cisco 2600系列替换Cisco 2500系列
  • 原文地址:https://www.cnblogs.com/Amaris-Lin/p/7459198.html
Copyright © 2020-2023  润新知