jpql的查询方式:
1.jpa query language (jpa查询语言)
特点:语法或关键字和sql语句相似,查询的是类与类的属性
需要将JPQL语句配置到接口方法上
* 1.特有的查询:需要在dao接口上配置方法
* 2.在新添加的方法上,使用注解的形式配置jpql查询语句
* 3.使用@Query注解
例如:
@Query 使用jpql的方式查询。?1代表参数的占位符,其中1对应方法中的参数索引
可以通过使用 @Query 来执行一个更新操作,加入 @Modifying 来将该操作标识为修改查询,这样执行就是更新操作
Spring Data JPA同样也支持sql语句的查询,只需要在注解@Query加入参数NativeQuery = true
/**
* 方法名的约定:
* findBy : 查询
* 对象中的属性名(首字母大写)
* 含义根据属性名查询 默认情况下:使用的是=
*
* 2.findBy + 属性名 + "查询方式(like | isnull)"
* 例如模糊查询:findBy + 属性名 +like
* 3.多条件查询:
* findBy + 属性名 + 查询方式 + “多条件的连接符”(and | or ) + 属性名 + 查询方式
*/
2020/1/31
specification动态查询
/**
* JpaSpecificationExecutor中定义的方法
**/
public interface JpaSpecificationExecutor<T> {
//根据条件查询一个对象
T findOne(Specification<T> spec);
//根据条件查询集合
List<T> findAll(Specification<T> spec);
//根据条件分页查询
Page<T> findAll(Specification<T> spec, Pageable pageable);
//排序查询查询
List<T> findAll(Specification<T> spec, Sort sort);
//统计查询
long count(Specification<T> spec);
}
specification接口中只有一个方法:toPredicate
//构造查询条件
/**
* root :Root接口,代表查询的根对象,可以通过root获取实体中的属性
* query :代表一个顶层查询对象,用来自定义查询
* cb :用来构建查询,此对象里有很多条件方法
**/
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);