快速业务通道

Java开发2.0: NoSQL - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
一个 Map(称为 iparams)创建为带有 3 个属性 —一次比赛的名称、日期和距离。(注意,在 Groovy 中,一个空白 Map 通过 [:]创建。)Race的一个新实例被创建,然后通过 save方法存储到底层数据 存储。

可以通过 Google App Engine 控制台来查看底层数据存储,确保我的数据的 确在那里,如图 2 所示:

图 2. 查看新创建的 Race

Java开发2.0: NoSQL(5)

时间:2011-09-04 IBM Andrew Glover

查找程序方法生成持久存储的实体

现在我已经存储了一个 Entity,拥有查找它的能力将有所帮助。接下来,我 可以添加一个 “查找程序” 方法。在本例中,我将把这个 “查找程序” 方法 创建为一个类方法(static)并且允许通过名称查找这些 Race(即基于 name属 性搜索)。稍后,总是可以通过其他属性添加其他查找程序。

我还打算对我的查找程序采用一个惯例,即指定:任何名称中不带单词 all的 查找程序都企图找到 一个实例。名称中包含单词 all的查找程序(如 findAllByName)能够返回一个实例 Collection或 List。清单 5 展示了 findByName查找程序:

清单 5. 一个基于 Entity 名称搜索的简单查找程序

static def findByName(name){   def query = new Query(Race.class.simpleName)   query.addFilter("name", Query.FilterOperator.EQUAL, name)   def preparedQuery = this.datastore.prepare(query)   if(preparedQuery.countEntities() > 1){   return new Race(preparedQuery.asList(withLimit(1))[0])   }else{   return new Race(preparedQuery.asSingleEntity())   }   }

这个简单的查找程序使用 Google App Engine 的 Query和 PreparedQuery类 型来查找一个类型为 “Race” 的实体,其名称(完全)等同于传入的名称。如 果有超过一个 Race符合这个标准,查找程序将返回一个列表的第一项,这是分页 限制 1(withLimit(1))所指定的。

对应的 findAllByName与上述方法类似,但添加了一个参数,指定 您想要的 实体个数,如清单 6 所示:

清单 6. 通过名称找到全部实体

static def findAllByName(name, pagination=10){   def query = new Query(Race.class.getSimpleName())   query.addFilter("name", Query.FilterOperator.EQUAL, name)   def preparedQuery = this.datastore.prepare(query)   def entities = preparedQuery.asList(withLimit(pagination as  int))   return entities.collect { new Race(it as Entity) }   }

与前面定义的查找程序类似,findAllByName通过名称找到 Race实例,但是它 返回 所有 Race。顺便说一下,Groovy 的 collect方法非常灵活:它允许删除创 建 Race实例的对应的循环。注意,Groovy 还支持方法参数的默认值;这样,如 果我没有传入第 2 个值,pagination将拥有值 10。

清单 7. 查找程序的实际运行

def nrace = Race.findByName("Charlottesville Marathon")   assert nrace.distance == 26.2    def races = Race.findAllByName("Charlottesville Marathon")   assert races.class == ArrayList.class 

清单 7中的查找程序按照既定的方式运行:findByName返回一个实例,而 findAllByName返回一个 Collection(假定有多个 “Charlottesville Marathon ”)。

Java开发2.0: NoSQL(6)

时间:2011-09-04 IBM Andrew Glover

“参赛者” 对象没有太多不同

现在我已能够创建并找到 Race的实例,现在可以创建一个快速的 Runner对象 了。这个过程与创建初始的 Race实例一样简单,只

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号