当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:小议Hibernate查询及数据检索

数据库持久层
持久层设计和数据库设计的原则
关于php的数据库持久层设计
在 SCA Module 中使用 Hibernate 框架实现数据持久层
流行持久层框架对数据库操作
Hibernate持久层操作
hibernate 的 log4j.properties 配置文件
Hibernate的映射类型 hibernate mysql映射类型
hibernate的findByExample
持久化对象PO
终于用hibernate把数据持久层写完了 小结下遇到的一些问题
理解PO类在数据层和VO类在逻辑层的区别
hibernate中使用session之一
hibernate映射到mysql数据库时应该注意的几点
在Struts和Hibernate之间搭起桥梁
Hibernate技术文章-基本配置和写法
Hibernate技术
Hibernate详解
Java数据库编程中的技巧
Hibernate 实体关联关系映射----总结
Hibernate中二级缓存的配置和使用

数据库持久层:小议Hibernate查询及数据检索


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 278 ::
收藏到网摘: n/a

今天小编整理一下hibernate的查询和检索,希望对大家有所帮助。

Hibernate查询及数据检索包括:

1. Criteria Query

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=1的封装(我们可以打开Hibernate show_sql 选项,

以观察Hibernate在运行期生成的SQL语句)。

Hibernate 在运行期会根据Criteria 中指定的查询条件(也就是上面代码中通过

criteria.add方法添加的查询表达式)生成相应的SQL语句。

这种方式的特点是比较符合Java 程序员的编码习惯,并且具备清晰的可读性。正因

为此,不少ORM实现中都提供了类似的实现机制(如Apache OJB)。

对于Hibernate的初学者,特别是对SQL了解有限的程序员而言,Criteria Query

无疑是上手的极佳途径,相对HQLCriteria Query提供了更易于理解的查询手段,借

IDECoding Assist机制,Criteria的使用几乎不用太多的学习。

Hibernate Query Language (HQL)

Criteria提供了更加符合面向对象编程模式的查询封装模式。不过,HQLHibernate

Query Language)提供了更加强大的功能,在官方开发手册中,也将HQL作为推荐的查询

模式。

相对CriteriaHQL提供了更接近传统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

子句指定了限定条件。