W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
可以通過以下兩種方式之一將自定義GQL查詢映射到存儲庫方法:
namedQueries
屬性文件
@Query
批注
使用@Query
批注:
GQL的標記名稱與方法參數(shù)的@Param
帶注釋的名稱相對應。
public interface TraderRepository extends DatastoreRepository<Trader, String> { @Query("SELECT * FROM traders WHERE name = @trader_name") List<Trader> tradersByName(@Param("trader_name") String traderName); @Query("SELECT * FROM test_entities_ci WHERE id = @id_val") TestEntity getOneTestEntity(@Param("id_val") long id); }
支持以下參數(shù)類型:
com.google.cloud.Timestamp
com.google.cloud.datastore.Blob
com.google.cloud.datastore.Key
com.google.cloud.datastore.Cursor
java.lang.Boolean
java.lang.Double
java.lang.Long
java.lang.String
enum
值。將這些查詢?yōu)?code class="literal" i="6305">String值。
除Cursor
外,還支持每種類型的數(shù)組形式。
如果要獲取查詢的項數(shù)或查詢返回的項,請分別設置@Query
批注的count = true
或exists = true
屬性。在這些情況下,查詢方法的返回類型應為整數(shù)類型或布爾類型。
Cloud Datastore提供的SELECT key FROM …?
特殊列適用于所有類型,可檢索Key`s of each row.
Selecting this special `key
列,對于count
和exists
查詢特別有用和高效。
您還可以查詢非實體類型:
@Query(value = "SELECT __key__ from test_entities_ci") List<Key> getKeys(); @Query(value = "SELECT __key__ from test_entities_ci limit 1") Key getKey(); @Query("SELECT id FROM test_entities_ci WHERE id <= @id_val") List<String> getIds(@Param("id_val") long id); @Query("SELECT id FROM test_entities_ci WHERE id <= @id_val limit 1") String getOneId(@Param("id_val") long id);
SpEL可用于提供GQL參數(shù):
@Query("SELECT * FROM |com.example.Trade| WHERE trades.action = @act AND price > :#{#priceRadius * -1} AND price < :#{#priceRadius * 2}") List<Trade> fetchByActionNamedQuery(@Param("act") String action, @Param("priceRadius") Double r);
種類名稱可以直接寫在GQL批注中。種類名稱也可以通過域類上的@Entity
注釋來解析。
在這種情況下,查詢應引用表名,該表名具有完全合格的類名,并用|
字符包圍:|fully.qualified.ClassName|
。當SpEL表達式以提供給@Entity
批注的種類名稱出現(xiàn)時,此功能很有用。
例如:
@Query("SELECT * FROM |com.example.Trade| WHERE trades.action = @act") List<Trade> fetchByActionNamedQuery(@Param("act") String action);
您還可以在屬性文件中使用Cloud Datastore參數(shù)標簽和SpEL表達式指定查詢。
默認情況下,@EnableDatastoreRepositories
上的namedQueriesLocation
屬性指向META-INF/datastore-named-queries.properties
文件。您可以通過提供GQL作為“ interface.method”屬性的值來在屬性文件中指定對方法的查詢:
Trader.fetchByName=SELECT * FROM traders WHERE name = @tag0
public interface TraderRepository extends DatastoreRepository<Trader, String> { // This method uses the query from the properties file instead of one generated based on name. List<Trader> fetchByName(@Param("tag0") String traderName); }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: