回顾
- springDatajpa,jpa规范,hibernate三者之间的关系
code – > springDatajpa --> jpa规范的API --> hibernate - 符合springDataJpa规范的dao层接口的编写规则
1.需要实现两个接口(JpaRepository,JapSpecificationExecutor)
2.提供响应的泛型(实体类) - 运行过程
动态代理的方式:动态代理对象
1. 什么是动态查询?
有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA 中可以通过JpaSpecificationExecutor 接口查询。相比JPQL,其优势是类型安全,更加的面向对象。
2. Specification基本查询
2.1 入门概念
Specification 为我们封装了一些复杂查询,只需要重写Specification
接口的某些方法,就可以生成我们自定义的复杂查询条件。
JpaSpecificationExecutor 方法列表
T findOne(Specification<T> spec); //查询单个对象
List<T> findAll(Specification<T> spec); //查询列表
//查询全部,分页
//pageable:分页参数
//返回值:分页pageBean(page:是springdatajpa提供的)
Page<T> findAll(Specification<T> spec, Pageable pageable);
//查询列表
//Sort:排序参数
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);//统计查询
Specification :查询条件
自定义我们自己的Specification实现类
实现
//root
:查询的根对象(查询的任何属性都可以从根对象中获取)
//CriteriaQuery
:顶层查询对象,自定义查询方式(了解:一般不用)
//CriteriaBuilder
:查询的构造器,封装了很多的查询条件
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb)
; //封装查询
2.2 根据name的条件查询
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class SpecTest