在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>);