hibernate 的criteria 查询语句是一种更加面向对象的方式查询。
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); //创建一个entityManager创建一个CriteriaBuilder 实列CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(entityClass);//criteriaBuilder创建一个createQuery实列,CriteriaQuery被赋予泛型,泛型参数申明CriteriaQuery在执行时返回的结果的类型。
criteriaQuery.select(criteriaQuery.from(entityClass)); //在criteriaQuery上设置查询表达式
return findList(criteriaQuery, first, count, filters, orders);//返回结果集
hibernate 中的JPQL 语句
String jpql = "select count(*) from Agent agent where lower(agent.name) = lower(:name)";//创建JPQL 语句,(应当注意的是from后边的Agent 是实体Bean而不是数据表。)
Long count = entityManager.createQuery(jpql, Long.class)//通过entityManager获取一个createQuery实列,第一个位置是JPQL 语句,第二个位置是反射对象 这个对象就是返回值的类型 .setFlushMode(FlushModeType.COMMIT).setParameter("name", name)//查询执行时刷新. 设置查询参数.getSingleResult();//返回单个结果
通过两种语句之间的比较可以加深深刻的理解CriteriaQuery 查询语句, 当然前提是必须能熟悉一种语言。在shop++程序中,在使用一般查询的时候还是建议用JPQL语句来实现,因为比如说实现实现一个简单的查询还要创建entityManager 然后再创建一个createQuery实列。。这样就无形中增加了代码,而且代码执行效率也会降低不少。当然如果是想做一个稍微复杂点的查询,比如动态查询,需要增加多个条件数量,排序等等的条件查询都是可以用CriteriaQuery查询语句的。