整合JPA和使用方法見:整合JPA
繼承JpaRepository接口后,自動擁有了按“實例”進行查詢的諸多方法踩蔚。先來列舉常用的一些方法
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
//無條件查詢 獲取整個表 相當于 SELECT * FROM table_name;
List<T> findAll();
//增加排序
List<T> findAll(Sort sort);
//通過一個id序列獲取列表
List<T> findAllById(Iterable<ID> ids);
//通過id查詢
T getOne(ID id);
...
}
無條件分頁查詢可以使用PagingAndSortingRepository中的方法
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
//通過傳入一個遵循pageale協(xié)議的對象 獲取某一頁的數(shù)據(jù)
Page<T> findAll(Pageable pageable);
}
有條件分頁查詢可用QueryByExampleExecutor中的方法
public interface QueryByExampleExecutor<T> {
///根據(jù)“實例”查找一批對象唾琼,且排序和分頁
<S extends T> Page<S> findAll(Example<S> example, Pageable pageable);
...
}
@Autowired
public ProductRespository productRespository;
我們自動注入的Respository輸入.find會顯示如下列表,基本上查詢也就用下面這些方法就夠了
如果需要其他簡單的列表查詢可直接在我們自己定義的ProductRespository接口中添加方法,也是可以直接調用查詢 不需要寫實現(xiàn)
public interface ProductRespository extends JpaRepository<Product,Integer> {
List<Product> findAllByVendorId(Integer vendorId);
}
實例講解一下Example和Pageable的用法
///返回單一對象精準匹配:
Product product= new Product();
product.setId(1);
//將匹配對象封裝成Example對象
Example<Product> example =Example.of(product);
//根據(jù)id:111精準匹配對象,id必須是唯一主鍵磺箕,查出2條會報錯
Optional<Product> one = repository.findOne(example);
///多條件臀突,返回Page對象:
///Sort.Direction是個枚舉有ASC(升序)和DESC(降序)
Sort.Direction sort = Sort.Direction.ASC;
///PageRequest繼承于AbstractPageRequest并且實現(xiàn)了Pageable
///獲取PageRequest對象 index:頁碼 從0開始 size每頁容量 sort排序方式 "id"->properties 以誰為準排序
Pageable pageable = PageRequest.of(index, size, sort, "id");
///要匹配的實例對象
Product exPro = new Product();
exPro.setVendorId(id);
///定義匹配規(guī)則 匹配"vendorId"這個屬性 exact 精準匹配
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("vendorId",ExampleMatcher.GenericPropertyMatchers.exact());
Example<Product> example = Example.of(exPro,exampleMatcher);
Page<Product> page = productService.productRespository.findAll(example,pageable);
///獲取總頁數(shù)
page.getTotalPages();
///獲取總元素個數(shù)
page.getTotalElements();
///獲取該分頁的列表
page.getContent();
備注:
ExampleMatcher:
///創(chuàng)建一個匹配器 默認全匹配
static ExampleMatcher matching() {
return matchingAll();
}
///匹配路徑和匹配模式
ExampleMatcher withMatcher(String propertyPath, GenericPropertyMatcher genericPropertyMatcher);