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