動態查詢回傳自定義物件
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.uj5u.com/houduan/500282.html
標籤:Java
下一篇:java后端分片上傳介面
