- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
第 8 章 条件查询
像 HQL(以及作为它的基础的 SQL)这样的关系型查询语言都非常灵活而且功能强大,但是如果要真正精通,也得花费很长的时间。很多应用程序开发人员对 SQL 只有基本的了解,只能根据以往的项目模仿些相似的示例,当碰上真正没有遇到过的或是非常难以理解的查询表达式时,才会寻求数据库专家的帮助。</p>
将查询语言的语法和 Java 代码混杂在一起,也很麻烦。第 3.4 节介绍了一种将所有查询语句单独放在另一个文件中,可以集中对它们进行查看和编辑,不需要使用 Java 字符串转义字符序列(escape sequence)和串联(concatenation)语法。不过,即使采用这种技巧,也是直到加载映射文档时才会解析 HQL 查询语句,也就是说,HQL 查询内容中隐藏的语法错误在应用程序运行以前都无法捕获。
Hibernate 采用条件查询的方法,为这些问题提供了一种不同寻常的解决方案。这种方法通过创建简单的 Java 对象,并把它们串连起来,将其作为过滤器来筛选出你想要的结果。你可以建立嵌套的、结构化的表达式。这种机制也可以让你只提供示例对象,以表明你想查找的内容是什么,同时还能控制哪些细节需要关注、哪些属性可以忽略。
从后面的介绍中可以看到,这种功能非常方便。但是坦率地讲,它也有自身的(非常次要的)缺点。把冗长的查询表达式转换成 Java API 会占用更多的内存空间,对于经验丰富的数据库开发人员而言,他们对条件查询不像对类 SQL(SQL-like)查询语言那么熟悉。有些东西你无法用以前的条件查询 API 来加以表达,诸如投影(从一个类的多个属性中取出子集,例如"select title, id from com.oreilly.hh.Track",而不是"select*from com.oreilly.hh.Track")和聚合(aggregation)(对查询结果做统计总结,例如获取某个属性的总和、平均值以及总数)。这种非常严重的不足,在编写本书第 1 版时 API 就存在,不过,在 Hibernate 3 中已经得到了解决。我们会向你介绍现在应该怎么实现这些条件查询。下一章还会演示如何使用 Hibernate 的面向对象的查询语言(HQL)来完成此类任务。
不论使用哪一种 Hibernate 的方法来表达查询,最终都会生成特定数据库的 SQL 语句,由 SQL 来实现查询目的。所幸,你不会看到这些底层细节,但是,如果你对这些细节感兴趣的话,可以使用 Hibernate 配置文件的 show_sql 属性打开 SQL 日志输出(如例 3-1 所示),或是在 Eclipse 中使用交互式的 SQL 查询预览(将在第 11 章介绍)。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论