Spring Cloud Datastore 按約定查詢方法

2024-01-12 09:34 更新
public interface TradeRepository extends DatastoreRepository<Trade, String[]> {
  List<Trader> findByAction(String action);

  int countByAction(String action);

  boolean existsByAction(String action);

  List<Trade> findTop3ByActionAndSymbolAndPriceGreaterThanAndPriceLessThanOrEqualOrderBySymbolDesc(
  			String action, String symbol, double priceFloor, double priceCeiling);

  Page<TestEntity> findByAction(String action, Pageable pageable);

  Slice<TestEntity> findBySymbol(String symbol, Pageable pageable);

  List<TestEntity> findBySymbol(String symbol, Sort sort);
}

在上面的示例中TradeRepository查詢方法是使用https://docs.spring.io/spring-data/data-commons/docs/current/reference/html#repositories基于方法名稱生成的。 query-methods.query-creation [Spring Data查詢創(chuàng)建命名約定]。

Cloud Datastore僅支持通過AND連接的過濾器組件以及以下操作:

  • equals
  • greater than or equals
  • greater than
  • less than or equals
  • less than
  • is null

在編寫僅指定這些方法簽名的自定義存儲庫接口之后,將為您生成實現(xiàn),并且可以將其與存儲庫的自動關(guān)聯(lián)實例一起使用。由于Cloud Datastore要求明確選擇的字段必須全部一起出現(xiàn)在組合索引中,因此find基于名稱的查詢方法將以SELECT *的身份運行。

還支持刪除查詢。例如,諸如deleteByActionremoveByAction之類的查詢方法會刪除findByAction找到的實體。刪除查詢是作為單獨的讀取和刪除操作而不是作為單個事務(wù)執(zhí)行的,因為除非指定了查詢的祖先,否則Cloud Datastore無法在事務(wù)中查詢。 結(jié)果,removeBydeleteBy名稱約定查詢方法不能通過performInTransaction@Transactional批注在事務(wù)內(nèi)部使用。

刪除查詢可以具有以下返回類型:

  • 一個整數(shù)類型,它是刪除的實體數(shù)
  • 被刪除的實體的集合
  • “無效”

方法可以具有org.springframework.data.domain.Pageable參數(shù)來控制分頁和排序,或者具有org.springframework.data.domain.Sort參數(shù)來僅控制排序。有關(guān)詳細信息, 請參見Spring Data文檔。

要在存儲庫方法中返回多個項目,我們支持Java集合以及org.springframework.data.domain.Pageorg.springframework.data.domain.Slice如果方法的返回類型為org.springframework.data.domain.Page,則返回的對象將包括當(dāng)前頁面,結(jié)果總數(shù)和頁面總數(shù)。

返回Page的方法執(zhí)行附加查詢以計算總頁數(shù)。另一方面,返回Slice的方法不會執(zhí)行任何其他查詢,因此效率更高。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號