JPA 仕様の一般的に使用されるクエリ + ソート + および + または

目次

1. データベース対話層は親クラスを継承します

2. レイヤー処理を実装する

1. データベース対話層は親クラスを継承します

public interface TablenameRepository extends JpaRepository<tableName, String>,JpaSpecificationExecutor<tableName> {
   
   

2. レイヤー処理を実装する

1. クエリ、ファジー、イン、ソート

Specification<TableName> special = new Specification<TableName>{
@Override
    public  Predicate toPredicate(Root<TblCarton2RCardLog> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
        List<Predicate> list = new ArrayList<Predicate>();
        //增加查询条件
        list.add(cb.equal(root.get("cartonNo").as(String.class), cartonNo));//某普通字段

        list.add(cb.equal(root.get("id").get("rCard").as(String.class), rCard));//主键中某字段
        //模糊查询
        list.add(cb.like(root.get("mocode").as(String.class), "%" + mocode + "%"));//like
        //between and
        list.add(cb.between(root.get("frozenDate").as(Long.class), frozenDateStart, frozenDateEnd));
        //大于等于
        list.add(cb.greaterThanOrEqualTo(root.get("id").get("rcard").as(String.class), rCardStart));
        //in
        list.add(root.get("id").get("lotNo").as(String.class).in(lotNos));
        //排序ORDER BY packdate DESC,packtime DESC
        Predicate[] p = new Predicate[list.size()];
        query.where(cb.and(list.toArray(p)));
        query.orderBy(cb.desc(root.get("packDate")),cb.desc(root.get("packTime")));

        return query.getRestriction();
    }

};

List<TableName> tableList = TablenameRepository.finndAll(special);

2.jpa と orc のリファレンス実装

and 条件は主に直接追加します。

キーは or です。新しい List<Predicate> を作成し、 or を使用して 2 つを関連付ける必要があります。

 @Override
    public Page<TestModule> findVenueList(Pageable pageable,String name,String [] hobbies,Integer age, String brirth) {
            Specification<TestModule> specification=new Specification<TestModule>() {
                @Override
                public Predicate toPredicate(Root<TestModule> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                    List<Predicate> listAnd=new ArrayList<>(); //组装and语句
                    if(!StringUtils.isBlank(name)) {
                        listAnd.add(criteriaBuilder.like(root.get("name"), "%" + name));  //姓名 模糊查询
                    }
                    if(age!=null) {
                        listAnd.add(criteriaBuilder.equal(root.get("age"), age)); //年龄
                    }
                    if(!StringUtils.isBlank(brirth)) {
                        listAnd.add(criteriaBuilder.like(root.get("brirth"), "%" + brirth + "%")); //出生地 模糊查询
                    }
                    Predicate predicateAnd = criteriaBuilder.and(listAnd.toArray(new Predicate[listAnd.size()])); //AND查询加入查询条件
                    List<Predicate> listOr = new ArrayList<>();///组装or语句
                    if(hobbies!=null && hobbies.length>0) {
                        for (String hoobbie : hobbies) {
                            //爱好多选 用OR链接
                            listOr.add(criteriaBuilder.equal(root.get("hobbie"), hoobbie));
                        }
                    }
                    Predicate predicateOR = criteriaBuilder.or(listOr.toArray(new Predicate[listOr.size()])); //OR查询加入查询条件
                    return criteriaQuery.where(predicateAnd,predicateOR).getRestriction();
                }
            };
            Page<TestModule> page=testModuleRepository.findAll(specification,pageable);
            return page;
    }

おすすめ

転載: blog.csdn.net/qq_44691484/article/details/128388614