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

数据库持久层
数据库持久层:Hibernate中cascade和inverse的用法
数据库持久层:hibernate的配置信息
数据库持久层:谈hibernate的持续性
数据库持久层:小议Hibernate查询及数据检索
数据库持久层:浅谈hibernate中的Session
数据库持久层:小编浅谈hibernate中抓取策略
数据库持久层:iBATIS框架中Serializable可读写缓存及存储类型
数据库持久层:ibatis高级特性
数据库持久层:为持久层编写单元测试
数据库持久层:小编浅谈ibatis基础语义
数据库持久层:Hibernate中与关联有关的问题
数据库持久层:浅谈ORM(对象关系映射)
总结JDBC连接SQLServer的错误Error establishing socket
数据库持久层:iBATIS的OR 映射
数据库持久层:DAO和ODBC的相似之处
数据库持久层:小编浅谈DAO的特色
数据库持久层:小编浅谈XDoclet 与Hibernate 映射
数据库属性hibernate.dialect的设置

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 280 ::
收藏到网摘: 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

子句指定了限定条件。