一、简介
Hibernate查询可以使用HQL NativeQuery,都要求对底层SQL语言数量掌握。对于比较复杂的SQL条件查询,如果程序员对SQL掌握不好,写起来会有一定困难。
Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现、SQL语句如何编写,是HQL Native Query的替代。
Criteria 查询采用面向对象方式封装查询条件,对SQL 语句进行封装,采用对象的方式来组合各种查询条件,由Hibernate 自动产生SQL 查询语句,是Hibernate框架的核心查询对象。
二 使用入门
Hibernate5.2中已不推荐使用Criteria,而是使用基于JPA规范的CriteriaQuery查询,更适于扩展。
1 普通全表查询
// 组织Criteria的各个不同部分,是一个工厂类
CriteriaBuilder bd = session.getCriteriaBuilder();
//条件查询结果准备
CriteriaQuery
//查询的表:相当from
Root
//相当被查询字段
cq.select(root);//执行查询
List
2 条件查询
//准备条件查询结果
CriteriaQuery
//查询的表:相当from
Root
//相当被查询字段
cq.select(root.get("pass"));
//相当查询条件
cq.where(bd.equal(root.get("id"), 3));
//执行查询
String pass = session.createQuery(cq).getSingleResult();
3 多结果查询:封装成数组
//准备条件查询结果
CriteriaQuery
//查询的表:相当from
Root
//相当被查询多个字段
cq.multiselect(root.get("name"),root.get("pass"));
//相当查询条件
cq.where(bd.equal(root.get("id"), 3));
//执行查询
Object[] rs = session.createQuery(cq).getSingleResult();
4 多结果查询,使用Tuple工具类
//准备条件查询结果:Tuple是工具类,封装查询结果
CriteriaQuery
//查询的表:相当from
Root
//相当被查询多个字段
Path
cq.multiselect(path,root.get("pass"));
//相当查询条件
cq.where(bd.equal(root.get("id"), 3));
//执行查询
Tuple tuple = session.createQuery(cq).getSingleResult();
System.out.println(tuple.get(path));
System.out.println(tuple.get(1));