Hibernate重新开始学习,这一部分对于查询以及更新数据库。
数据查询与检索是 Hibernate 中的一个亮点。相对其他 ORM 实现而言,Hibernate提供了灵活多样的查询机制。其中包括:
1. Criteria Query
2. Hibernate Query Language (HQL)
3. SQL
首先讲一下Criteria Query:
Criteria Query 通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query 可以看作是传统 SQL 的对象化表示,如:
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 本身只是一个查询容器,具体的查询条件需要通过 Criteria.add方法添加到 Criteria 实例中。
Expression.eq |
对应 SQL“field = value”表达式。如 Expression.eq("name","Erica") |
Expression.allEq |
参数为一个 Map 对象,其中包含了多个属性-值对应关系。相当于多个 Expression.eq 关系的叠加 |
Expression.gt |
对应 SQL 中的 “field > value ” 表达式 |
.... |
.... |
Criteria 提供了更加符合面向对象编程模式的查询封装模式。不过, HQL(Hibernate
Query Language)提供了更加强大的功能,在官方开发手册中,也将 HQL 作为推荐的查询
模式。
相对 Criteria,HQL 提供了更接近传统 SQL 语句的查询语法,也提供了更全面的特性。
最简单的一个例子:
String hql = "from org.hibernate.sample.TUser";
Query query = session.createQuery(hql);
List userList = query.list();
上面的代码将取出 TUser 的所有对应记录。
如果我们需要取出名为“Erica”的用户的记录,类似 SQL,我们可以通过 SQL 语句加
以限定:
String hql ="from org.hibernate.sample.TUser as user where user.name='Erica'";
Query query = session.createQuery(hql);
List userList = query.list();
其中我们新引入了两个子句“as” “where” as 子句为类名创建了一个别名, where和
子句指定了限定条件。
HQL 子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。
关于HQL, Hibernate 官方 开发手 册中已 经提供了 极其详尽 的说明 和示例 ,详 见Hibernate 官方开发手册(Chapter 11)。