动态查询返回自定义对象
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));
声明:本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。