Specification条件查询

wuchangjian2021-11-14 17:50:54编程学习

在日常工作的过程中,难免会遇到条件查询,接下来就来了解一下Specification条件查询。
要使用Specification条件查询,我们需要继承JpaSpecificationExecutor这个接口。

public interface PetDao extends JpaRepository<Pet,Integer>, 
								JpaSpecificationExecutor<Pet>{}

实体类我们依然使用Pet
测试:
查询所有名字为pp的Pet。由于Specification是接口类型,我们只能使用匿名内部类的方法创建实例,然后会重写它的方法toPredicate(Root root,CriteriaQuery<?> query,CriteriaBuilder builder),root.get("")获得对应查询语句中的属性名,builder后跟查询条件(where,isNull等等),返回的predicate就是查询结果

@Test
public void test6(){
    List<Pet> pets = petDao.findAll(new Specification<Pet>() {
        //重写方法  构建查询条件和对应的值
        //select*from t_pet where isnull(birth) is true
        //select*from t_pet where name = "PP"

        /**
         *
         * @param root  得到 查询的 列(属性),得到查询的根 对应 name
         * @param query 封装查询对象的信息
         * @param builder   构建查询条件的关系,对应 =
         * @return
         */

        @Override
        public Predicate toPredicate(Root<Pet> root,
                                     CriteriaQuery<?> query,
                                     CriteriaBuilder builder) {
            Path<Object> birth = root.get("birth");
            Predicate predicate0 = builder.isNull(birth);
//
//                Path<Object> id = root.get("id");
//                Predicate predicate1 = builder.equal(id, "1");

            Predicate predicate = builder.and(predicate0, predicate0);

            return predicate;
        }
    });
    System.out.println(pets);
}

相关文章

40、Git

                 如果你再次修改了受管理...

Java: Memory

Garbage Collection In Java, the memory c...

7-165 圆形体体积计算器 (20 分)

7-165 圆形体体积计算器 (20 分) 本题要求实现一个常用圆形体体积的计算器。计...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。