1.Criteria
API
The Java
Persistence Criteria API is used to define dynamic queries through
the construction of object-based query definition objects,rather
than use of the string-based approach of JPQL.
--Java
标准持久化 API 用来构建动态查询(基于对象的查询构建)
2.modes
--type-restricted、non-typed
3.performance maybe not
excellent as named or JPQL queries
--性能表现的差异较其他查询方式
4.CriteriaBuilder (the
main interface into Criteria API)
--generated
by EntityManager or EntityMangerFactory
--how to
create CriteriaQuery objects
----1.createQuery
----2.createQuery(Class)
使用泛型,可以避免类的转换
----3.createTupleQuery()
使用元组对象,而非对象数组
----4.createCriteriaDelete()
批量删除
----5.createCriteriaUpdate()
批量更新
5.having
一个好记的例子是:having allows grouped results to be filtered.
6.使用例子:
--CriteriaBuilder
cb=em.getCriteriaBuilder();
--//查询对象的集合
--CriteriaQuery
cq=cb.CreateQuery();
--Root
e=cq.from(Employee.class);
--cq.where(cb.greaterThan(e.get("salary"),100000));
--Query
query=em.createQuery(cq);
--List
result=query.getResultList();
--//查询单个对象
--CriteriaQuery
cq=cb.createQuery();
--Root
e=cq.form(Employee.class);
--cq.where(cb.equal(e.get("id"),cb.parameter(Long.class,"id")))
--Query
query=em.createQuery(cq);
--query.setParameter("id",id);
--Employee
result2=query.getSingleResult();
--//查询单个数据元素
--CriteriaQuery
cq=cb.createQuery();
--Root
e=cq.from(Employee.class);
--cq.select(cb.max(e.get("salary")));
--Query
query=em.createQuery(cq);
--BigDecimal
result3=(BigDecimal)query.getSingleResult();
--//查询数据元素的集合
--CriteriaQuery
cq=cb.createQuery();
--Root
e=cq.from(Employee.class);
--cq.select(e.get("firstName"));
--Query
query=em.createQuery(cq);
List
result4=query.getResultList();
--//查询元素数组的集合
--CriteriaQuery
cq=cb.createQuery();
--Root
e=cq.from(Employee.class);
--cq.multiselect(e.get("firstName"),e.get("lastName"));
--Query
query=em.createQuery(cq);
--List
result5=query.getResultList();
今天总结到这里,每天一点进步,积累多一点,快乐多一点!