Spring JPA 核心概念
阿新 • • 發佈:2020-08-26
Spring JPA 核心概念
翻譯: Core concepts
Spring資料儲存庫抽象中的中心介面是repository
。它採用要管理的域類以及域類的ID型別作為型別引數。此介面主要充當標記介面,以捕獲要使用的型別,並幫助您發現擴充套件此介面的介面。CrudRepository
為被管理的實體類提供了複雜的CRUD功能。
例3:CrudRepository
介面
public interface CrudRepository<T, ID> extends Repository<T, ID> { <S extends T> S save(S entity); //儲存指定的實體 Optional<T> findById(ID primaryKey); //返回給定id的實體 Iterable<T> findAll(); //返回所有實體 long count(); //統計實體個數 void delete(T entity); //刪除給定的實體 boolean existsById(ID primaryKey); //判斷給定id的實體是否存在 // … more functionality omitted. }
我們還提供特定於永續性技術的抽象,例如
JpaRepository
或MongoRepository
。這些介面擴充套件了CrudRepository
,在CrudRepository
的通用介面外,還增加拓展了公開了其他基礎永續性技術的介面功能。
在CrudRepository
之上,有一個PagingAndSortingRepository
抽象介面,它添加了其他方法來簡化對實體的分頁訪問:
例4:PagingAndSortingRepository
介面
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); }
獲取頁面大小為20的user
實體列表第二頁的程式碼如下所示:
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));
注:Page從0開始
除了查詢方法之外,還可以使用計數和刪除查詢的查詢派生。以下列表顯示派生計數查詢的介面定義:
例5:計數查詢派生
interface UserRepository extends CrudRepository<User, Long> { long countByLastname(String lastname); }
以下列表顯示了派生的刪除查詢的介面定義:
例6:刪除查詢派生
interface UserRepository extends CrudRepository<User, Long> {
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}
附註:SpringBoot 專案分頁查詢Demo
Dao
public interface ShipDao extends JpaRepository<ShipPO,Integer> {
Page<ShipPO> findByRegion(String region,Pageable pageable);
}
Service
@RequestMapping(value = "/ship",method = RequestMethod.GET)
public List<ShipPO> GetShip(
@RequestParam(value = "region",required = false,defaultValue = "none") String region
){
Pageable pageable = PageRequest.of(page,5, Sort.by(Sort.Direction.DESC,"sdate"));
//無區域限制
//根據地區查詢,有地區限制 無狀態限制
shiplist = shipDao.findByRegion(region,pageable).get().collect(Collectors.toList());
return shiplist;
}