JPA使用小记

在spring boot中与MySQL交互时,使用了JPA规范,特此记录

Jpa(java persistenceapi)JAVA持久化API定义了对象-关系映射(ORM)以及实体对象持久化的标准接口。

在spring框架中,可以通过继承JpaRespository<T,L>的方式来实现与数据库的交互,其中T为数据表所对应的实体,一般是model类,L为该实体主键的类型

1、当查询比较简单的时候,直接通过其findByxxx方法查询,只要符合该方法的命名规范就可以直接查询到数据;

List<T> findAll();
List<T> findAll(Sort sort);
List<T> findAll(Iterable<ID> ids);
<S extends T> List<S> save(Iterable<S> entities);
void flush();
<S extends T> S saveAndFlush(S entity);
void deleteInBatch(Iterable<T> entities);
void deleteAllInBatch();
T getOne(ID id);

2、当查询条件比较复杂,上述findby不能实现时,可以适用@Query注释来自定义查询语句,例如

@Query("select max(jobinfo.processes) from Jobinfo jobinfo,Taskinfo taskinfo where taskinfo.jobid=jobinfo.id and (shenweistatus=4 or shenweistatus=5) and queuename=?1")
List findMaxNuclear(String queuename);

可以看到这条自定义的查询语句涉及到两张表,也就是两个实体,通过传递queuename实现了两张表的联合查询

3、JpaSpecificationExecutor<T>接口也是我们会使用到的一个接口,可以支持带查询条件的分页排序功能

T findOne(Specification<T>);
List<T> findAll(Specification<T>);
List<T> findAll(Specification<T>, Sort);
List<T> findAll(Specification<T>, Pageable);
long count(Specification<T>);

点赞