1.2.5 对象导航

翻译 2008年09月28日 19:04:00
    在Java中访问对象和在数据库中访问对象是不同的。在java中,如果你要访问User的Billing信息,你可以调用aUser.getBillingDetails().getAccountNumber()方法。这是面向对象中最通常的访问对象的方法,这种访问对象的方式被称之为行走对象图。你通过导航从一个对象到达另一个对象,但是这种方式在面向对象的数据库中运行的并不尽如人意。
    提高数据库性能的唯一办法就是最小化访问数据库的连接数。所以最明显的方法就是减少对数据库的SQL查询(其他方法包括使用存储过程和JDBC batch)。
    因此提高效率的方式就是把表连接起来,而连接中表的个数往往决定了对象导航的深度。举例来说,如果你仅仅对于User感兴趣而对于他的BillingDetails没有兴趣,那么就可以使用简单查询,
        select * from user u where u.USER_ID=123
    从另一方面说,如果同时还要访问User的UserBillingDetails信息的话,我们就要使用一个不同的查询,
        select * from user u left outter join billing_details bd on bd.USER_ID=u.USER_ID where USER_ID=123
    正如我们看到的,当我们进行对象导航的时候,我们需要清楚的知道我们要访问的对象在图中的位置。
    从另一方面说,任何对象持久化方案都提供了同一种功能,那就是只有在初次访问对象的时候才会取得相关对象的数据。但是,这种方式对于关系型数据库来说却显得效率不高,因为这意味着它要对于对象图中的每一个节点都要执行一次Statement,这也造成N+1次的查询。
    这种在Java和关系型数据库中的差异,也许是造成性能不匹配的最主要根源。虽然在许多报刊杂志中都建议使用StringBuffer来建立字符串的连接,但是这并不能解决N+1次查询的问题。幸运的是,Hibernate提供了关于这个问题的成熟的解决方法。我们将在第4章和第7章来讨论这些内容。
    现在我们已经有了一个详尽的面向对象和关系数据库的不匹配的列表,这其中也包括具体项目的耗费和解决方案,当然你也许已经根据自己的经验能够解决这些问题。这种耗费往往是无法准确估计的,我想这也是许多失败项目的重要原因吧。
     

Hibernate的OID和对象导航查询

OID查询 @Test public void testSelectOID(){ Session session = null; Transaction ...
  • fu_17791654327
  • fu_17791654327
  • 2017年10月17日 15:20
  • 311

OGNL——Object-Graph Navigation Language(对象图导航语言)

OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一...
  • zsm653983
  • zsm653983
  • 2012年10月05日 16:57
  • 3522

Hibernate检索对象的方式

Hibernate提供的检索对象的方式有: •导航对象图检索方式 –根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterato...
  • juroney1
  • juroney1
  • 2014年04月29日 03:12
  • 863

1.2.5

/* ID:18861501 LANG:C++ TASK:dualpal */ /*------------------Header Files------------------*/ #includ...
  • qq_33765907
  • qq_33765907
  • 2016年03月25日 15:52
  • 84

Hibernate的学习之路二十八(唯一OID和对象导航的查询的方式)

前言 这篇文章主要讲了,一些查询的方法。以及开发中比较常见的 分析 技术分析之Hibernate框架的查询方式 1. 唯一标识OID的检索方式 * session.get(对象.cla...
  • a4171175
  • a4171175
  • 2017年12月04日 12:08
  • 119

python-安装mysql(win64)

经过各种报错,总结方法如下: 1.https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载: MySQL_python‑1.2.5‑cp27‑none‑win...
  • u011445855
  • u011445855
  • 2018年01月04日 08:58
  • 114

OGNL 对象图导航语言

OGNL是从ActionContext中获取数据的。          ActionContext的结构:         ValueStack:             List:动作类放在...
  • u011554611
  • u011554611
  • 2015年01月04日 20:46
  • 641

PRML-系列一之1.2.5~1.2.6

曲线拟合  我们已经看到多项式曲线拟合问题如何用误差最小化的形式来表示。这里,我们回到曲线拟合例子并从概率的角度来看待它,从而获得一些对误差函数和正规化的深刻理解,以及引导我们到一个完整的贝叶斯处理。...
  • u010182633
  • u010182633
  • 2015年05月10日 23:02
  • 648

Hibernate学习笔记(基础)——检索方式

直接上干货: 我们在Hibernate中使用的检索方式有以下五个:导航对象图检索、OID检索、HQL检索、QBC检索、本地SQL检索。...
  • u011760575
  • u011760575
  • 2014年12月31日 16:06
  • 378

Hbase 1.2.5安装部署

一、安装zookeeper1、下载zookeeper 地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeep...
  • u013310025
  • u013310025
  • 2017年05月02日 22:48
  • 1901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1.2.5 对象导航
举报原因:
原因补充:

(最多只允许输入30个字)