Spring Data Jpa
2021-07-14 04:07
标签:删除 tar 帮助 oal repos 多模板 项目 today turn 在基本的数据查询实例中,可以通过实现CrudRepository接口来实现针对一个的查询或多个字段的组合查询,但这只是对于条件比较简单的情况下,如果条件比较复杂,那么一个方法的名字就会显的很长,那么就可以换一种方式来实现数据查询,比如下面即将提到的Criteria API, Specification, Query dsl. 一个典型的查询代码如下: 主要步骤如下: 当然如果觉的写那么多模板代码比较麻烦,也可以直接通过 为了让repository可以执行这个查询,需要repository接口实现 或者实现组合查询(jpa中提供了where, and, or 等帮助方法来简化操作): 开源项目Querydsl也提供了简化模板代码的实现, 你需要 查询代码如下: 其中BooleanExpression和Specification类似,当然,repository需要实现相应的接口 https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ Spring Data Jpa 标签:删除 tar 帮助 oal repos 多模板 项目 today turn 原文地址:https://www.cnblogs.com/helloz/p/9539340.htmlIntroduction
Criteria API
CriteriaQuery
LocalDate today = new LocalDate();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery
CriteriaBuilder
entityManager
上执行查询CriteriaUpdate/CriteriaDelete
CriteriaQuery
是jpa 2.0引入的接口,而在jpa 2.1中还引入了CriteriaUpdate
和CriteriaDelete
接口来实现对数据的修改和删除操作。CriteriaUpdate
的实现和CriteriaQuery
类似,其实现如下:CriteriaBuilder builder = entityManager
.getCriteriaBuilder();
CriteriaUpdate
EntityManager
的createQuery
接口手写sql, 也是可以的。也有其他的方法,如下面的Specification
接口。Specification接口
Specification
接口实现了可重用的预测(Predicate), 一个Specification
接口就是一个查询条件,可以通过创建多个Specification
接口实现复杂的条件查询,其接口如下:public interface Specification
Root
, CriteriaQuery
, CriteriaBuilder
和Criteria
中的一样,下面是一个示例:public CustomerSpecifications {
public static Specification
JpaSpecificationExecutor
接口。查询实例如下:customerRepository.findAll(hasBirthday());
customerRepository.findAll(where(customerHasBirthday()).and(isLongTermCustomer()));
Querydsl
pom.xml
中添加querydsl的包,然后添加插件以实现在每个源码包下自动创建查询类比如QCustomer
。BooleanExpression customerHasBirthday = customer.birthday.eq(today);
BooleanExpression isLongTermCustomer = customer.createdAt.lt(today.minusYears(2));
customerRepository.findAll(customerHasBirthday.and(isLongTermCustomer));
public interface CustomerRepository extends JpaRepository
https://vladmihalcea.com/jpa-criteria-api-bulk-update-delete/
上一篇:python使用小技巧