we will discover Google Datastore Queries, in this example we will manipulate a book entity with proporties: id, title, author, isbn, date.
So let's Start;
Create new Entity or Add new Entries:
So let's Start;
Create new Entity or Add new Entries:
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();Entity entityBook = new Entity("Books");entityBook.setProperty("title", "title1");entityBook.setProperty("author", "author1");entityBook.setProperty("isbn", "12E3E31E");entityBook.setProperty("date", new Date());datastore.put(entityBook);
In this case the id will be generated automatically by GAE.
you can use Key to manually add the ID
Key bookKey = KeyFactory.createKey("Books", "id1"); Entity entityBook = new Entity("books", bookKey); entityBook.setProperty("title", "title1"); entityBook.setProperty("author", "author1); entityBook.setProperty("isbn", "12E3E31E"); entityBook.setProperty("date",new Date() ); DatastoreService datastore=DatastoreServiceFactory.getDatastoreService(); datastore.put(entityBook);
Filters
A query's filters set constraints on the properties, keys, and ancestors of the entities to be retrieved.
Return 5 Books as a List.
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Query query = new Query("Books").addSort("date", Query.SortDirection.DESCENDING); List<Entity> customers = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5));
Find and returned a book with matched filter.
Query query = new Query("Books"); query.addFilter("title", FilterOperator.EQUAL, "title1"); PreparedQuery pq = datastore.prepare(query); Entity Book = pq.asSingleEntity();
Note: The comparison operator can be any of the following (defined as enumerated constants in the nested class
Query.FilterOperator
):Operator | Meaning |
---|---|
EQUAL | Equal to |
LESS_THAN | Less than |
LESS_THAN_OR_EQUAL | Less than or equal to |
GREATER_THAN | Greater than |
GREATER_THAN_OR_EQUAL | Greater than or equal to |
NOT_EQUAL | Not equal to |
IN | Member of (equal to any of the values in a specified list) |
The
NOT_EQUAL
operator actually performs two queries: one in which all other filters are unchanged and the NOT_EQUAL
filter is replaced with a LESS_THAN
filter, and one where it is replaced with a GREATER_THAN
filter. The results are then merged, in order. A query can have no more than one NOT_EQUAL
filter, and a query that has one cannot have any other inequality filters.
The
IN
operator also performs multiple queries: one for each item in the specified list, with all other filters unchanged and the IN
filter replaced with an EQUAL
filter. The results are merged in order of the items in the list. If a query has more than one IN
filter, it is performed as multiple queries, one for each possible combination of values in the IN
lists.
A single query containing
NOT_EQUAL
or IN
operators is limited to no more than 30 subqueries.
Update Entity:
To update, just modify the existing Entity and save it again.
Query query = new Query("Books"); query.addFilter("title", FilterOperator.EQUAL, "title1"); PreparedQuery pq = datastore.prepare(query); Entity Book = pq.asSingleEntity(); Book.setProperty("name", name); Book.setProperty("email", email); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); datastore.put(Book); //GAE will know save or update
Note: you can get an entity by the id:
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Key k=KeyFactory.createKey("Books", "id1"); Entity book=datastore.get(k);
Delete:
To delete, need the entity key.
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Key k=KeyFactory.createKey("Books", "id1"); datastore.delete(k);
Note: you can search for an entity using Filters then deleted using datastore.delete(book.getKey());
For more details about datastore queries see: developers.google.com/appengine/docs/java/datastore/queries
Post a Comment