用SimpleDS解决Google AppEngine的持久层

本文介绍如何利用SimpleDS解决Google App Engine的持久层问题,它提供了一个简洁的持久化框架,支持实体与Java类之间的映射,以及缓存、后台任务、性能优化等功能。对比传统API,SimpleDS在实现简单任务时更为高效,同时支持多种查询操作符,处理实体和事务等。示例展示了如何使用SimpleDS进行实体操作和查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SimpleDS 解决 Google AppEngine 的持久层

Posted by:chszs Posted on: May 05 2010

SimpleDSGAEGoogle App Engine )提供了一个极其简洁的持久化框架。它仅仅是在数据存储 API 上封装了一层,提供了实体和 Java 类之间的映射。

GAE 提供了一个非常强大的服务功能,可以在云上持久化数据,但是它本身提供的 API 来处理持久化则显得很麻烦:

·数据存储 API 太面向底层了,直接暴露出映射样式的结构;

· JDOJPAAPI 对于完成简单的任务来说,过于复杂,而且为关系数据库增加了大量额外的检查设计影响了性能。

SimpleDS 的最新版本为 1.0 RC1 ,它提供了以下功能:

·支持一级缓存、二级缓存;

·后台任务突破了 GAE30 秒限制;

·优化功能:通过把 n +1 次查询转换成两次查询,与缓存进行组合使得性能提高;

·可使用 SimpleDS 注释或 JPA 注释进行驱动的配置;

·支持内嵌类;

·支持‘ == ’,‘ < ’,‘ <= ’,‘ > ’,‘ >= ’,‘ IN ’,‘ != ’,‘ like ’等操作符;

·支持分页查询和游标;

·支持事务处理等。

处理实体的例子:

// JPA retrieve by key Model m1 = entityManager.find(Model.class, key); Model m2 = entityManager.find(Model.class, key2); // SimpleDS retrieve by key Model m1 = entityManager.get(key); List<Model> l = entityManager.get(key1, key2); // JPA persist changes entityManager.merge(m1); entityManager.persist(m2); // SimpleDS persist changes entityManager.put(m1); entityManager.put(l); Model m3 = new Model(); entityManager.put(parentKey, m3); // JPA remove Model m1 = entityManager.find(Model.class, key); entityManager.remove(m1); // SimpleDS remove entityManager.remove(key1, key2, key3);

查询的例子:

// JPA Query query = entityManager.createQuery( "select m from Model m where m.createdAt<=?1 and m.createdBy=?" ); query.setParameter(1, new Date()); query.setParameter(2, userKey); return query.getResultList(); // SimpleDS SimpleQuery query = new SimpleQuery(Model.class) .lessThanOrEqual("createdAt", new Date()) .equal("createdBy", userKey); return entityManager.find(query); // retrieve just keys entityManager.find(query.keysOnly()); // with limits entityManager.find(query.withOffset(10).withLimit(100));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值