What Is
Object Query is a simple query builder thought for java, that allow to write typesafe and refactor resistant query, without bound to persistence engine.
Object Query is a simple query builder thought for java, that allow to write typesafe and refactor resistant query, without bound to persistence engine.
issue tracker:https://github.com/organizations/objectquery/dashboard/issues
mailing list:https://groups.google.com/group/objectquery
source:https://github.com/organizations/objectquery
| base select statement | DONE |
| projections with grouping functions | DONE |
| conditions and nested conditions | DONE |
| order by with grouping functions | DONE |
| having clause | JPA Only |
| ignore case like condition type | DONE |
| Nested Query | TODO |
| Join | TODO |
| support for update operation | TODO |
| support for delete operation | TODO |
| support for insert operation | TODO |
Insert the specify maven dependency for each implementation:
JPA:
<dependency> <groupId>org.objectquery</groupId> <artifactId>jpaobjectquery</artifactId> <version>1.0.0</version> </dependency>JDO:
<dependency> <groupId>org.objectquery</groupId> <artifactId>jdoobjectquery</artifactId> <version>1.0.0</version> </dependency>OrientDB:
<dependency> <groupId>org.objectquery</groupId> <artifactId>orientdbobjectquery</artifactId> <version>1.0.0</version> </dependency>
The requirements for build a query with query builder is an java Object Oriented "Domain" that is an group of persisted objects.
public class Dog {
private String name;
private Person owner;
private Home home;
...gets sets...
};
public class Person {
private String name;
private List<Person> friends;
private Person mum;
private Person dud;
private Home home;
private Dog dog;
...gets sets...
}
public class Home {
public enum HomeType {KENNEL,HOUSE};
private String address;
private HomeType type;
private int weight;
private double price;
...gets sets...
}
Search All person that live in "rue d'anton" with a mum with name "elisabeth" and order by name.
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); Person toSearch = query.target(); query.eq(toSearch.getHome().getAddress(),"rue d'anton"); query.eq(toSearch.getMum().getName(),"elisabeth"); query.order(toSearch.getName());
Select name and address of person.
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); Person toSearch = query.target(); query.prj(toSearch.getName()); query.prj(toSearch.getHome().getAddress());
Count all person that live in "rue d'anton"
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); Person toSearch = query.target(); query.prj(toSearch,ProjectionType.COUNT); query.eq(toSearch.getHome().getAddress(),"rue d'anton");
Search all person with name elisabeth or jhon.
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); Person toSearch = query.target(); QueryCondition or = oq.or(); or.eq(toSearch.getName(),"elisabeth"); or.eq(toSearch.getName(),"jhon");
Primitive type need a different management, for some technical reasons is not possible use primitive type directly
for use it we need to box it
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); Person toSearch = query.target(); query.eq(query.box(toSearch.getWeight()),2); query.eq(query.box(toSearch.getPrice()),4000.0);
| Operator | Implementation | ||
|---|---|---|---|
| JPA | JDO | OrientDb | |
| eq | ok | ok | ok |
| notEq | ok | ok | ok |
| like | ok | ok | ok |
| notLike | ok | ok | ok |
| min | ok | ok | ok |
| minEq | ok | ok | ok |
| max | ok | ok | ok |
| maxEq | ok | ok | ok |
| in | ok | ok | ok |
| notIn | ok | ok | ok |
| contains | ok | ok | ok |
| notContains | ok | ok | ok |
| or | ok | ok | ok |
| and | ok | ok | ok |
| Operator | Implementation | ||
|---|---|---|---|
| JPA | JDO | OrientDb | |
| MAX | ok | ok | ok |
| MIN | ok | ok | ok |
| AVG | ok | ok | ok |
| COUNT | ok | ok | ok |
| Operator | Implementation | ||
|---|---|---|---|
| JPA | JDO | OrientDb | |
| ASC | ok | ok | ok |
| DESC | ok | ok | ok |
| Operator | Implementation | ||
|---|---|---|---|
| JPA | JDO | OrientDb | |
| MAX | ok | ko | ko |
| MIN | ok | ko | ko |
| AVG | ok | ko | ko |
| COUNT | ok | ko | ko |
| Operator | Implementation | ||
|---|---|---|---|
| JPA | JDO | OrientDb | |
| eq | ok | ko | ko |
| notEq | ok | ko | ko |
| like | ok | ko | ko |
| notLike | ok | ko | ko |
| min | ok | ko | ko |
| minEq | ok | ko | ko |
| max | ok | ko | ko |
| maxEq | ok | ko | ko |
| in | ok | ko | ko |
| notIn | ok | ko | ko |
| contains | ok | ko | ko |
| notContains | ok | ko | ko |
| or | ok | ko | ko |
| and | ok | ko | ko |
Direct execute:
javax.persistence.EntityManager entityManager= .... ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... List<Person> res = (List<Person>)JPAObjectQuery.execute(query, entityManager); ...JPA query generation:
javax.persistence.EntityManager entityManager= .... ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... javax.persistence.Query jpaQuery = JPAObjectQuery.buildQuery(query, entityManager); ...JPQL string and parameters generation:
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... JPQLQueryGenerator jpqlGenerator = JPAObjectQuery.jpqlGenerator(query); String jpql = jpqlGenerator.getQuery(); Map<String,Object> paramenters = jpqlGenerator.getParameters(); ...
Direct execute:
javax.jdo.PersistenceManager peristenceManager= .... ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... List<Person> res = (List<Person>)JDOObjectQuery.execute(query, peristenceManager); ...JDOQL string and parameters generation:
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... JDOQLQueryGenerator jdoqlGenerator = JDOObjectQuery.jdoqlGenerator(query); String jpql = jdoqlGenerator.getQuery(); Map<String,Object> paramenters = jdoqlGenerator.getParameters(); ...
Direct execute:
com.orientechnologies.orient.object.db.OObjectDatabaseTx db= .... ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... List<Person> res = (List<Person>)OrientDBObjectQuery.execute(query, db); ...OrientDB Query string and parameters generation:
ObjectQuery<Person> query = new GenericObjectQuery<Person>(Person.class); ... OrientDBQueryGenerator oriendbGenerator = OrientDBObjectQuery.oriendbGenerator(query); String orientdbql = oriendbGenerator.getQuery(); Map<String,Object> paramenters = oriendbGenerator.getParameters(); ...