几个月前项目中用过hibernate。但是突击式的学习过程。现在回想起来,还真是没能留下什么痕迹。
今天开始,我将会在空闲时间写下对Hibernate的一些认识。就当是一个 "认知" 的过程
Web应用框架(Jakarta Struts 对 WebWork),GUI组件框架(Swing 对 SWT),或模版工具(JSP 对
Velocity)。每一种相互竞争的解决方案都有其优缺点,但它们至少都共享了相同的范围与总体的方法。
不幸的是,这还不是持续性技术的情形,对持续性技术相同的问题有许多不同的混乱的解决方案。
前面这段话,意味深长。这是对"持续性技术"现状的一个概括。
本着这种现状去学习和研究"持续性技术",把现今熟悉的"持续性技术"进行对比式的学习。寻求框架
的处理思路。分析他们的优点,缺点...
先思考几个问题
1)数据持久到底有那些成熟的方式?
■ 直接使用SQL和JDBC进行工作 也可以结合DAO模式
■ 序列化持续性机制 他提供了将对象图(应用状态)写到字节流中的能力,然后它可能被持续化到文件或数据库中。
他也被Java的远程方法调用(RMI)使用来为复杂对象传递值语义。他的另一种用法是在机器集群中跨节点复制应
用状态。
■ EJB实体Bean
■ JDO
■ ORM 对象-关系映射:中间的短线强调了当这两个领域相碰撞时出现的不匹配问题
■ XML持续层 XML持续层是序列化模式的变种。
■ 存储过程
2)ORM解决方案有那些组成部分?
■ 在持续类的对象上执行基本的CRUD操作的一组API。
■ 用于指定查询的一种语言或一组API,这些查询会引用类和类属性。
■ 用于指定映射元数据的工具。
■ 实现ORM的一项技术,用来与事务对象交互以完成脏检查、懒关联存取和其它优化功能。
3)实现ORM的有那些不同的方式?
■ 纯关系
■ 轻量对象映射
■ 中等对象映射
■ 完全对象映射
4)相关的ORM有那些问题?
■ 持续类像什么?它们是细粒度的JavaBean吗?或者它们是一些类似于EJB的组件模型的实例吗?持续性工具有多么
透明?我们需要为业务领域的类采用一种编程模型或一些规范吗?
■ 映射元数据是如何定义的?因为对象-关系转换完全由元数据控制,这些元数据的格式和定义是重要的核心问题。
ORM工具应该提供一个图形化处理元数据的GUI吗?或者有定义元数据的更好的方法吗?
■ 我们应该映射类的继承层次吗?这有几种标准策略。多态关联、抽象类和接口怎么映射呢?
■ 对象同一性和相等性如何关联到数据库同一性(主键)?我们如何将特定类的实例映射到特定表的行。
■ 在运行时持续性逻辑如何与业务域对象交互?这是一个普通的编程问题,有许多的解决方案包括源代码生成、运行时
反射、运行时字节码生成和编译时字节码增强。这个问题的解决方案可能影响到你的构建过程(但宁可如此,你也不
愿受到其它像用户那样的影响)
■ 持续性对象的生命周期是什么样的?有些对象的生命周期依赖于其它关联对象的生命周期吗?
我们如何将一个对象的生命周期转化为数据库行的生命周期?
■ 为排序、检索和合计提供了什么样的工具?应用可以在内存中处理其中的一些事情。但为了有效地使用关系技术有时
需要通过数据库完成这些工作
■ 如何有效地取出关联数据?对关系数据的有效访问通常通过表连接实现。面向对象的应用通常通过导航对象图访问数
据可能的话,两种数据访问模式应该避免n+1次选择的问题,以及它的补充笛卡尔积的问题(在一次查询中取出过多的
数据)
5)所有数据访问技术都不得不面对的问题有那些?
■ 事务和并发性
■ 缓存管理(和并发性)