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();
	}
}