百木园-与人分享,
就是让自己快乐。

spring data jpa动态查询返回自定义对象

动态查询返回自定义对象

1、一般情况下使用spring jpa封装的JpaSpecificationExecutor和JpaRepository的接口,这个好处就是在于很多方法jpa已经定义,写了实现方法在SimpleJpaRepository这个类中,非常好用
2、动态查询,jpa提供了好几种方式,这里可以用Example这个接口来实现,也非常方便。
3、如果动态查询且返回我想要的字段,jpa并没有封装特定的方法,我看到jpa默认返回所有字段,就是select * from table_name;这个在查询的时候会很慢,比如表格列中有base64字符串时(用于保存小文件)。

解决方案如下


       //假设入参查询条件
        Student student = Student.builder().name(\"小明8999\").sex(\"1\").build();
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        //StudentResult只是Student的部分字段
        CriteriaQuery<StudentResult> criteriaQuery = criteriaBuilder.createQuery(StudentResult.class);
        Root<Student> root = criteriaQuery.from(Student.class);
        List<Predicate> predicates = new ArrayList<>();
        //返回自定义对象
        criteriaQuery.multiselect(root.get(\"id\"), root.get(\"name\"));
        if (Objects.nonNull(student.getName())) {
            Predicate sexPredicate = criteriaBuilder.equal(root.get(\"name\"), student.getName());
            predicates.add(sexPredicate);
        }
        if (Objects.nonNull(student.getId())) {
            Predicate idPredicate = criteriaBuilder.le(root.get(\"id\"), student.getId());
            predicates.add(idPredicate);
        }

        Predicate and = criteriaBuilder.and(predicates.toArray(new Predicate[0]));
        criteriaQuery.where(and);
        //返回自定义对象
        List<StudentResult> resultList = entityManager.createQuery(criteriaQuery).getResultList();
        System.out.println(JSONValue.toJSONString(resultList));

来源:https://www.cnblogs.com/IHaveDream/p/16517458.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » spring data jpa动态查询返回自定义对象

相关推荐

  • 暂无文章