GCD Json Java is a Java data access API designed for the Google App Engine datastore (https://cloud.google.com/datastore/docs/) through JSON API reference (https://cloud.google.com/datastore/docs/apis/v1beta2/). In this version, you can do basic actions like : commit, query and lookup.
- You need an appengine application (https://console.developers.google.com/project) with Google Cloud Datastore API status is On.
- Create your own project. Visit https://console.developers.google.com > Create Project, enter project name and project id.
- Important : Enable Google Cloud Datastore API. Visit https://console.developers.google.com. Choose your created project > APIs & auth (left menu) > APIs > Google Cloud Datastore API > On.
- Some information to config. Choose your created project > APIs & auth (left menu) > Credentials > Create New Client ID > Chooose Service account > Create Client ID.
- projectName : is your project id with "s~" before, example your project id : "your-project-id" -> projectName = "s~your-project-id".
- iss : is Email address.
- p12 key file : click Generate new P12 key, download, keyLocation variable is path to your p12 Key file.
- Config
String projectName = "s~your-project-id";
String iss = "xxxx20893014-d1kh9putd2n3hbqjsjlsbes1i8spxxx@developer.gserviceaccount.com";
String keyLocation = "your-project-id-xxxxx.p12";
GCDConfig config = new GCDConfig(projectName, iss, keyLocation);
GCDService ds = GCDServiceFactory.getInstance(config);
- Registry your entry
- Mark annotation @Entity for your entry.
- Mark annotation @Id for entry key.
- Mark annotation @Index for index field.
import cloud.google.datastore.annotation.Annotation.Entity;
import cloud.google.datastore.annotation.Annotation.Id;
import cloud.google.datastore.annotation.Annotation.Index;
@Entity
public class Foo {
@Id
private String id = "";
private String name = "";
@Index
private String category = "";
@Index
private Date doc = Calendar.getInstance().getTime();
@Index
private int status = 1;
}
- Commit
// Insert single entry
String projectName = "s~your-project-id";
String iss = "xxxx20893014-d1kh9putd2n3hbqjsjlsbes1i8spxxx@developer.gserviceaccount.com";
String keyLocation = "your-project-id-xxxxx.p12";
GCDConfig config = new GCDConfig(projectName, iss, keyLocation);
GCDService ds = GCDServiceFactory.getInstance(config);
Foo f = new Foo();
f.setId("entry-01");
f.setName("Entry 01");
List<Key<Foo>> listKey = ds.commit(Foo.class).entities(f).insert();
// Insert multi entry
Foo f1 = new Foo();
f1.setId("entry-01");
f1.setName("Entry 01");
Foo f2 = new Foo();
f2.setId("entry-02");
f2.setName("Entry 02");
List<Key<Foo>> listKey = ds.commit(Foo.class).entities(f1, f2).insert();
// Insert list entry
Foo f1 = new Foo();
f1.setId("entry-01");
f1.setName("Entry 01");
Foo f2 = new Foo();
f2.setId("entry-02");
f2.setName("Entry 02");
List<Foo> list = new ArrayList<Foo>();
list.add(f1);
list.add(f2);
List<Key<Foo>> listKey = ds.commit(Foo.class).entities(list).insert();
// Update single entry
Foo f = new Foo();
f.setId("entry-01");
f.setName("Entry 01");
List<Key<Foo>> listKey = ds.commit(Foo.class).entities(f).update();
// Delete single entry
Foo f = new Foo();
f.setId("entry-01");
f.setName("Entry 01");
boolean success = ds.commit(Foo.class).entities(f).delete();
- Lookup
// Lookup single entry
String id = "entry-01";
Foo lookupFoo = ds.lookup(Foo.class).id(f.getId()).get();
// Lookup multi entry
String id1 = "entry-01";
String id2 = "entry-01";
List<Foo> listResult = ds.lookup(Foo.class).ids(id1, id2).list();
// Lookup list entry
String id1 = "entry-01";
String id2 = "entry-01";
List<String> listId = new ArrayList<String>();
listId.add(id1);
listId.add(id2);
List<Foo> listResult = ds.lookup(Foo.class).ids(listId).list();
- Query
// Query with limit
List<Foo> list = ds.query(Foo.class).limit(10).list();
// Query with offset
List<Foo> list = ds.query(Foo.class).offset(10).list();
// Query with order : ASCENDING, DESCENDING
List<Foo> listOrderByDocASC = ds.query(Foo.class).order("doc", OrderDirection.ASCENDING).list();
List<Foo> listOrderByDocDESC = ds.query(Foo.class).order("doc", OrderDirection.DESCENDING).list();
// Query with filter : EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL
List<Foo> listFilterByStatus = ds.query(Foo.class).filter("status", 1, FilterOperator.EQUAL).list();
List<Foo> list = ds.query(Foo.class).filter("status", 1, FilterOperator.GREATER_THAN_OR_EQUAL).filter("status", 10, FilterOperator.LESS_THAN_OR_EQUAL).list();
// Composite query
List<Foo> list = ds.query(Foo.class).filter("status", 1, FilterOperator.GREATER_THAN_OR_EQUAL).limit(10).offset(10).order("doc", OrderDirection.ASCENDING).list();
- GQL Query : query with your query string (GQL Syntax : https://cloud.google.com/appengine/docs/python/datastore/gqlreference)
List<Foo> list = ds.gqlQuery(Foo.class).queryString("SELECT * FROM Foo").list();