点击上方 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;
}
};
Sort sort = new Sort(Sort.D