Hibernate条件查询

一、简介

Hibernate查询可以使用HQL  NativeQuery,都要求对底层SQL语言数量掌握。对于比较复杂的SQL条件查询,如果程序员对SQL掌握不好,写起来会有一定困难。

Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现、SQL语句如何编写,是HQL Native Query的替代。

Criteria 查询采用面向对象方式封装查询条件,对SQL 语句进行封装,采用对象的方式来组合各种查询条件,由Hibernate 自动产生SQL 查询语句,是Hibernate框架的核心查询对象。

 使用入门

Hibernate5.2中已不推荐使用Criteria,而是使用基于JPA规范的CriteriaQuery查询,更适于扩展。

普通全表查询

// 组织Criteria的各个不同部分,是一个工厂类

CriteriaBuilder bd = session.getCriteriaBuilder();

//条件查询结果准备

CriteriaQuery cq = bd.createQuery(User.class);

//查询的表:相当from

Root root = cq.from(User.class);

//相当被查询字段

cq.select(root);//执行查询

List list = session.createQuery(cq).getResultList();

2  条件查询

//准备条件查询结果

CriteriaQuery cq = bd.createQuery(String.class);

//查询的表:相当from

Root root = cq.from(User.class);

//相当被查询字段

cq.select(root.get("pass"));

//相当查询条件

cq.where(bd.equal(root.get("id"), 3));

//执行查询

String pass = session.createQuery(cq).getSingleResult();

多结果查询:封装成数组

//准备条件查询结果

CriteriaQuery cq = bd.createQuery(Object[].class);

//查询的表:相当from

Root root = cq.from(User.class);

//相当被查询多个字段

cq.multiselect(root.get("name"),root.get("pass"));

//相当查询条件

cq.where(bd.equal(root.get("id"), 3));

//执行查询

Object[] rs = session.createQuery(cq).getSingleResult();

多结果查询,使用Tuple工具类

//准备条件查询结果:Tuple是工具类,封装查询结果

CriteriaQuery cq = bd.createTupleQuery();

//查询的表:相当from

Root root = cq.from(User.class);

//相当被查询多个字段

Path path = root.get("name");

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));

你可能感兴趣的:(Hibernate条件查询)