W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
默認(rèn)情況下,所有讀取和查詢均為強(qiáng)讀取。一個(gè)強(qiáng)大的讀取
是在當(dāng)前時(shí)間戳的讀取,并保證地看到,一直致力于直到這個(gè)讀開始的所有數(shù)據(jù)。一個(gè)閱讀陳舊,另一方面在過去的時(shí)間戳被讀取。Cloud Spanner允許您確定讀取數(shù)據(jù)時(shí)數(shù)據(jù)的最新程度。使用SpannerTemplate
,您可以通過將SpannerQueryOptions
或SpannerReadOptions
上的Timestamp
設(shè)置為適當(dāng)?shù)淖x取或查詢方法來指定:
讀:
// a read with options: SpannerReadOptions spannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.now()); List<Trade> trades = this.spannerTemplate.readAll(Trade.class, spannerReadOptions);
查詢:
// a query with options: SpannerQueryOptions spannerQueryOptions = new SpannerQueryOptions().setTimestamp(Timestamp.now()); List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT * FROM trades"), spannerQueryOptions);
可以通過模板API 使用輔助索引進(jìn)行讀取,也可以通過SQL for Queries隱式使用 輔助索引 。
下面顯示了如何通過在SpannerReadOptions
上設(shè)置index
來使用二級(jí)索引從表中讀取行:
SpannerReadOptions spannerReadOptions = new SpannerReadOptions().setIndex("TradesByTrader"); List<Trade> trades = this.spannerTemplate.readAll(Trade.class, spannerReadOptions);
限制和偏移量?jī)H受查詢支持。以下將僅獲取查詢的前兩行:
SpannerQueryOptions spannerQueryOptions = new SpannerQueryOptions().setLimit(2).setOffset(3); List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT * FROM trades"), spannerQueryOptions);
請(qǐng)注意,以上等效于執(zhí)行SELECT * FROM trades LIMIT 2 OFFSET 3
。
按鍵讀取不支持排序。但是,對(duì)Template API的查詢支持通過標(biāo)準(zhǔn)SQL以及Spring Data Sort API進(jìn)行排序:
List<Trade> trades = this.spannerTemplate.queryAll(Trade.class, Sort.by("action"));
如果提供的排序字段名稱是域類型屬性的名稱,則將在查詢中使用與該屬性對(duì)應(yīng)的列名稱。否則,假定給定的字段名稱是Cloud Spanner表中列的名稱。可以忽略大小寫,對(duì)Cloud Spanner類型STRING和BYTES的列進(jìn)行排序:
Sort.by(Order.desc("action").ignoreCase())
僅在使用查詢時(shí)才可以進(jìn)行部分讀取。如果查詢返回的行的列少于要映射到的實(shí)體的列,則Spring Data將僅映射返回的列。此設(shè)置也適用于嵌套結(jié)構(gòu)及其相應(yīng)的嵌套POJO屬性。
List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT action, symbol FROM trades"), new SpannerQueryOptions().setAllowMissingResultSetColumns(true));
如果設(shè)置設(shè)置為false
,則查詢結(jié)果中缺少列時(shí)將引發(fā)異常。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: