Hibernate总结
Hibernate是一种OOP的持久化实现。
1, OO和领域对象
什么是OO?
OO就是面向对象,就是自然而然的模拟对象和对象交互的编程实现。按照面向对象的要求一个好的OO要实现高内聚、低耦合。然而内聚和耦合本身就是一个彼此矛盾的概念——因此在OO的不同场合,我们要把握好不同的度,不要用一致的概念去要求OO的程度(比如在层次的划分上,在对象业务逻辑的划分上。。。。。。要求是不一样的。我们的目标是:最简洁的代码、最清晰的结构。)
话说回来,我们谈领域对象:
什么是领域对象?
领域对象是对业务知识的抽象,可以表现为UML图,可以表现为软件代码。按照我们上一段对“OO”的概念定义,我们要求这个对象要自然而然的模拟业务对象本身,以及业务对象的功能,同时还要符合一定程度的耦合内聚的要求。领域模型还有这样一层意义:领域模型是开发人员参与领域模型设计的开发方法(在EE的领域设计这本书里,模型分为:领域专家和分析人员的领域模型,以及开发人员的软件模型。前后两种模型容易不匹配。因此在软件开发阶段的领域模型,必须是开发过程和模型建模等多种概念的综合)
举例:银行ATM机
ATM.机器内余额
存款结果 ATM.存款操作(钞票) throw 各种异常
通讯消息 ATM.通讯(消息) throw 各种异常
……
一个对象是“数据和操作的封装”,所以我们一般不会对钞票进行建模,不会使用“钞票.操作”这种对象——这是(在业务建模上)没有意义的——但是就这个概念,引起过很多的争论,典型的就是贫血和充血模型。
我认为:贫血模型是不OO的,但是并不是说贫血模型不是最佳实践——事实上,贫血模型是java技术现状的最佳实践。在这种实践中,“业务层”和贫血deomain层对应了完整的领域模型操作和数据。好处是更纯粹。因为在现有的技术条件惯性下(不考虑hiberante),一个对象和另外一个对象发生关系,必然要涉及到持久化逻辑——这导致了对象职责分散。妥协的方案是既然不能OO,就不如干脆贫血。——所以我们知道OO并不是开发软件的最核心指导原则。
对于充血模型:我们首先要区分几种逻辑
1, 持久化逻辑
2, 模型内逻辑
3, 模型关联对象逻辑
4, 多个模型内不关联对象的逻辑
对于123,按照OO的原则,我们要求内聚。对于4,需要一个服务类,服务类专注多个模型间的消息以及处理流程。
BTW:很多人对持久化逻辑比如save update等保持在模型内可能争议不大,但是对于查找类的逻辑放到模型内,有疑问。认为这有点怪味道——其实我认为放到外边或者里面都行,我放到里面的是因为看起来更内聚(这个业务仅仅和这个模型相关,而且和其他的save等保持在同一个地方)
从一个更宏观的角度看充血模型和贫血模型都有domain和服务类,似乎没有什么不同,但是从一个更宽的角度看:充血模型更接近业务模型,更接近问题本身。充血模型完整的和业务设计等结合在一起。
理想中有一种想法:持久化作为一种标注性的服务被附加到业务模型上,而查找可以作为一种特定的技术和语言被此服务提供——以提供更透明、更简单的持久化解决方案。但是微观的看,我们必须定义对象和数据库的对应关系,以及持久化策略。
2, OO、对象和关系数据库持久化问题
接上一章的话题,我们谈OO、对象和关系数据库的持久化。
一个对象,包含了几个部分
1, 数据
这个是OO和关系数据库要关注的核心问题,即数据的持久化和关联数据的持久化
2, 领域逻辑『和持久化逻辑(如果不是写到服务类中的话)
持久化逻辑,领域逻辑的持久化,也可以考虑触发器、SP。并不一定非要编程实现(这应该是优先但不唯一的选择)
A映射策略
数据部分可能对应了数据库中的某张表,或者某几张表,这个时候我们要制定这个对象和表的映射策略:1对1、1对m、m对1等等。这是比较容易的部分。
而对象间的关系,比如组合和继承、也可能是映射策略的一个很重要的考量——尤其这涉及到sql和业务实现的时候。这个是关系数据库比较郁闷的地方。
B级联策略
OO的对象是级联,这种级联关系,要透明的反应到持久化数据库(的操作上)。
至于性能问题等等,不是ORM关注的关键问题——这是工程问题。对于这个工程问题,是通过上面几种策略以及缓存等的组合使用来解决的。
3, Hibernate对OO持久化要求的实现
。。。。。这部分我略了。因为我看过太多关于这一部分的文章。文章教授了如何写配置文件,如何一对一,如何级联。。。。。但是没有告诉大家:为什么要这么做,这么做的目的。
这篇文章的额目的是将OO和HIBERNATE等作为一个体系串起来,形成一个bootswap,需要的时候,按此索引查找其他hibernate参考书。
分享到:
相关推荐
SSH之Hibernate总结 SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置...
【Hibernate总结】 Hibernate是一个强大的Java持久化框架,它封装了JDBC,负责对象持久化,作为应用程序和数据库之间的中间层。映射关系是通过配置文件维护的,这使得Hibernate能够与不同的数据库系统灵活地交互。 ...
本资源包含的"hibernate总结练习源码"提供了对Hibernate ORM框架实际应用的实例,有助于深入理解和掌握其核心概念与功能。 1. **对象关系映射(ORM)**:Hibernate 提供了一种机制,将数据库中的表映射为Java类,表...
《Hibernate总结(三)》 在本篇关于Hibernate的总结中,我们将深入探讨这个流行的Java对象关系映射(ORM)框架的关键概念和技术细节。Hibernate作为一款强大的工具,它极大地简化了Java开发人员处理数据库操作的工作...
标题:hibernate总结 描述:此文档是个人在使用Hibernate框架进行数据持久化操作时的经验积累和技巧分享。文档全面覆盖了Hibernate的各种配置方法、数据映射技术、集合类映射、对象关系映射(ORM)基础以及与J2EE...
### 学习Hibernate总结 #### 一、简介与配置 Hibernate是Java环境下一款优秀的对象关系映射(ORM)框架,它极大地简化了数据访问层(DAL)的编码工作,允许开发人员将主要精力集中在业务逻辑上而不是繁琐的SQL语句...
1. 引入Hibernate所需的JAR文件,例如在Eclipse中创建Hibernate类库。 2. 创建配置文件`hibernate.cfg.xml`,其中包含数据库连接信息、日志格式等。 3. 设计实体类,对应数据库表中的记录,并提供对应的getter和...
**总结项目实战** 在实际项目中,使用 Hibernate 可以简化数据库操作,提高开发效率。常见的应用场景包括用户管理、订单处理、商品分类等。项目实践中要注意合理设计实体关系,避免 N+1 查询问题,利用缓存优化性能...
《Hibernate4总结文档》 Hibernate4作为一款强大的Java对象关系映射框架,简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库层面的细节。本文将深入探讨Hibernate4的配置和使用,帮助开发者更好地理解...
总结来说,Hibernate是一个强大的ORM框架,它极大地简化了Java应用的数据库操作,提高了开发效率,并提供了高级特性如缓存、事务管理等。通过深入理解和熟练使用Hibernate,开发者可以构建更高效、更易于维护的...
Hibernate是一个在Java环境中广泛使用的数据持久化工具,它支持对象关系映射(ORM)技术,将Java对象映射到关系型数据库的表中。Hibernate允许开发者通过面向对象的方式来操作数据库,避免了直接使用SQL语句的繁琐...
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...