Low-Level APIを使ってid指定でレコードを取得する
JDOを使ったgetObjectById的なことをLow-Level APIを使ったやり方
クラス
- MyEntity : datastoreに格納するentity
- MyEntityDao : MyEntityをDAOする
- MyEntityServiceImpl : MyEntityDaoを使ってあれする *インタフェースがないという突っ込みはなしで
ソース
MyEntity
package sample.lowlevel.server.entity; public class MyEntity { private Long id; private String name; public MyEntity(Long id, String name) { super(); this.id = id; this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
MyEntityDao
datastoreService.getメソッドで1件取得する。
引数にはKeyFactory.createKeyを使ってKindと主キーの値を指定する
datastoreService.get( KeyFactory.createKey(TABLE_NAME, id) );
package sample.lowlevel.server.dao; import java.util.ArrayList; import java.util.List; import sample.lowlevel.server.entity.MyEntity; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.EntityNotFoundException; import com.google.appengine.api.datastore.KeyFactory; import com.google.appengine.api.datastore.Query; public class MyEntityDao { private static final String TABLE_NAME = "MyEntity"; private DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); public void insert(MyEntity myEntity){ Entity entity = new Entity(TABLE_NAME); entity.setProperty("name", myEntity.getName()); datastoreService.put(entity); } public MyEntity getMyEntity(Long id){ MyEntity myEntity = null; try { Entity entity = datastoreService.get( KeyFactory.createKey(TABLE_NAME, id) ); myEntity = new MyEntity( entity.getKey().getId(), (String) entity.getProperty("name") ); } catch (EntityNotFoundException e) { e.printStackTrace(); } return myEntity; } public List<MyEntity> getAll(){ List<MyEntity> list = new ArrayList<MyEntity>(); DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); Query query = new Query(TABLE_NAME); Iterable<Entity> iter = datastoreService.prepare(query).asIterable(); for (Entity entity : iter) { MyEntity myEntity = new MyEntity( entity.getKey().getId(), (String) entity.getProperty("name") ); list.add(myEntity); } return list; } }
MyEntityServiceImpl
package sample.lowlevel.server; import java.util.List; import sample.lowlevel.server.dao.MyEntityDao; import sample.lowlevel.server.entity.MyEntity; public class MyEntityServiceImpl { private MyEntityDao dao; public MyEntityServiceImpl() { dao = new MyEntityDao(); } public void insert(String name){ MyEntity myEntity = new MyEntity(null, name); dao.insert(myEntity); } public MyEntity get(Long id){ return dao.getMyEntity(id); } public List<MyEntity> getAll(){ return dao.getAll(); } }