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

打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

动态查询返回自定义对象

1、一般情况下使用spring jpa封装的JpaSpecificationExecutor和JpaRepository的接口,这个好处就是在于很多方法jpa已经定义,写了实现方法在SimpleJpaRepository这个类中,非常好用
2、动态查询,jpa提供了好几种方式,这里可以用Example这个接口来实现,也非常方便。
3、如果动态查询且返回我想要的字段,jpa并没有封装特定的方法,我看到jpa默认返回所有字段,就是select * from table_name;这个在查询的时候会很慢,比如表格列中有base64字符串时(用于保存小文件)。
解决方案如下
  1.        //假设入参查询条件
  2.         Student student = Student.builder().name("小明8999").sex("1").build();
  3.         CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
  4.         //StudentResult只是Student的部分字段
  5.         CriteriaQuery<StudentResult> criteriaQuery = criteriaBuilder.createQuery(StudentResult.class);
  6.         Root<Student> root = criteriaQuery.from(Student.class);
  7.         List<Predicate> predicates = new ArrayList<>();
  8.         //返回自定义对象
  9.         criteriaQuery.multiselect(root.get("id"), root.get("name"));
  10.         if (Objects.nonNull(student.getName())) {
  11.             Predicate sexPredicate = criteriaBuilder.equal(root.get("name"), student.getName());
  12.             predicates.add(sexPredicate);
  13.         }
  14.         if (Objects.nonNull(student.getId())) {
  15.             Predicate idPredicate = criteriaBuilder.le(root.get("id"), student.getId());
  16.             predicates.add(idPredicate);
  17.         }
  18.         Predicate and = criteriaBuilder.and(predicates.toArray(new Predicate[0]));
  19.         criteriaQuery.where(and);
  20.         //返回自定义对象
  21.         List<StudentResult> resultList = entityManager.createQuery(criteriaQuery).getResultList();
  22.         System.out.println(JSONValue.toJSONString(resultList));
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表