点击上方 Java老铁,并选择 设为星标
优质文章和资料会及时送达
5.Specifications动态查询
有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。
5.1精准匹配
/**
* 精准匹配
*/
@Test
public void tset3(){
Specification<Class> specification = new Specification<Class>() {
public Predicate toPredicate(Root<Class> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//获取属性
Path<Object> className = root.get("className");
//构造查询
Predicate predicate = cb.equal(className, "20班");
return predicate;
}
};
Class cla = classDao.findOne(specification);
System.out.println(cla);
}
5.2 模糊匹配
/**
* 模糊匹配
*/
@Test
public void tset4(){
Specification<Class> specification = new Specification<Class>() {
public Predicate toPredicate(Root<Class> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//获取属性
Path className = root.get("className");
//构造查询
Predicate predicate = cb.like(className.as(String.class), "%班");
return predicate;
}
};
List<Class> all = classDao.findAll(specification);
for (Class aClass : all) {
System.out.println(aClass);
}
}
5.3 排序
/**
* 排序
*/
@Test
public void test5(){
Specification<Class> specification = new Specification<Class>() {
public Predicate toPredicate(Root<Class> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Path<Object> className = root.get("className");
Predicate predicate = cb.like(className.as(String.class), "%班");
return predicate;
}

本文介绍了Spring Data JPA中JpaSpecificationExecutor接口用于动态查询的优势和用法,包括精准匹配、模糊匹配、排序、多条件拼接和分页查询。同时,详细讲解了一对多和多对多的多表查询实现,涉及@OneToMany、@ManyToOne和@ManyToMany等注解的使用,并提到了Spring Data的默认事务处理方式。
最低0.47元/天 解锁文章
924

被折叠的 条评论
为什么被折叠?



