当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:小议Hibernate查询及数据检索
今天小编整理一下hibernate的查询和检索,希望对大家有所帮助。
Hibernate查询及数据检索包括:
2. Hibernate Query Language (HQL)
3. SQL
下面就和大家说说其中的两种Criteria Query和 Hibernate Query Language (HQL)
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 实例实际上是SQL “Select * from t_user where
name=’Erica’ and sex=
以观察Hibernate在运行期生成的SQL语句)。
Hibernate 在运行期会根据Criteria 中指定的查询条件(也就是上面代码中通过
criteria.add方法添加的查询表达式)生成相应的SQL语句。
这种方式的特点是比较符合Java 程序员的编码习惯,并且具备清晰的可读性。正因
为此,不少ORM实现中都提供了类似的实现机制(如Apache OJB)。
对于Hibernate的初学者,特别是对SQL了解有限的程序员而言,Criteria Query
无疑是上手的极佳途径,相对HQL,Criteria Query提供了更易于理解的查询手段,借
助IDE的Coding Assist机制,Criteria的使用几乎不用太多的学习。
Hibernate Query Language (HQL)
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
子句指定了限定条件。
评论 (0) All