数据持久化(JDBC/EJB/JDO/OJB/Hibernate)

来源:互联网 发布:mac.gj.qq.com 编辑:程序博客网 时间:2024/05/22 00:31

1。问题域
1)持久
    数据可访问的而且还必须是持久
    持久数据存储就是即使在服务器崩溃的情况下仍能存在的数据存储
2)问题域
    对象关系的映射(ORM)
    持久数据的访问(DA)
3)考究点
    数据完整性
    并发性
    连接管理
    数据同步
2。你还在写sql访问数据库吗?
你仍然在Write SQL? 仍然使用JDBC+ SQL(DAO)?当然这是访问持久数据层最原始、最直接的方法,运行效率高,但是
DAO对象和SQL语言紧密耦合,难以维护。
3。J2EE的数据解决方案?
EJB BMP&CMP(Entity Bean/Session Bean/)
Entity bean:霸占资源/并发请求的响应时间慢
Session bean:?
4。JDO
JDO是Java Database Object ,面向对象的持久性机制,轻量级的框架。
持久对象PO和POJO
PO Persistent Object,对应数据库中的entity
POJO plain ordinary Java object,无格式普通 Java 对象,装入和存储持久数据

5 JDO ORM

JDO的实现:
1)编写POJO
2)编译POJO
3)ORM
    使用Enhancer,处理POJO的class文件,把POJO替换成同名的PO,完成对象与关系的映射
不同的JDO产品的Enhancer生成的PO字节码可能会有所不同,可能会影响在JDO产品之间的可移植性
4)运行PO
JSP也是在编译期被转换成Servlet来运行的,在运行期实际上运行的是Servlet,而不是JSP

6 JDO Problems
PO不能脱离PM (Hibernate Session) VO
静态的 POJO的Enhancer
不能运行期动态Enhance
JDO产品的分裂
标准的缺陷
7。OJB
Object Relational Bridge (OJB)
 an ORM tool
 allows transparent persistence for Java Objects against relational databases.
db.apache.org/ojb/
文档太简单,太少
OJB下一个版本全面支持JDO

8。Hibernate ORM
Hibernate的实现:
1、编写POJO
2、编译POJO
3、直接运行,在运行期,由Hibernate的CGLIB动态把POJO转换为PO。

9。What’ s a best ORM should be?
ORM
轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。
具有可扩展性,API开放
产品有稳定的发展保障。
开源,功能定制。
Other
TopLink,CocoBase,Castor
Apache OJB

9。Hibernate
Java 对象持久层的轻量级封装框架
持久层设计的最佳实践的经验总结
ORM映射工具
提供从Java类到数据表之间的映射
提供数据查询和恢复机制。
大大减少操作数据库的工作量
相对于使用JDBC和SQL来手工操作数据库
和多种Web服务器或应用服务器良好集成
支持几乎所有的流行的数据库服务器(达16种),从而实现动态的Query
Application可用来在Java应用程序中取代大部分JDBC代码

10。 Solution?
读/写需要
多表映射
事务支持
开发周期
资源耗费
应用的量级

11。EJB Architecture Compare:
传统的架构:Entity Bean
Session Bean <-> Entity Bean <-> DB
JDBC
为了解决性能障碍的替代架构:
Session Bean <-> DAO <-> JDBC <-> DB
Hibernate
提高上面架构的开发效率的架构:
Session Bean <-> DAO <-> Hibernate <-> DB
对比
内存消耗/运行效率/开发效率/分布式/安全检查、集群、负载均衡的支持
可整合到J2EE系统中作为持久层框架
1)内存消耗:
采用JDBC的架构2无疑是最省内存的
Hibernate的架构3次之
EJB的架构1最差。
2)运行效率
JDBC的代码非常优化,JDBC架构运行效率最高
需要程序员非常精通JDBC,运用 Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,
采用结果集cache等等。一般情况下程序员做不到这一点
Hibernate/JDBC/EJB
3)开发效率:
在有JBuilder的支持下以及简单的项目,EJB架构开发效率最高,JDBC次之,Hibernate最差。
大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EJB架构很可能会失败。
4)分布式/安全检查,集群,负载均衡的支持

12。Implements Hibernate
1) 配置Hibernate
Hibernate的开发包
Hibernate的配置文件
hibernate.cfg.xml
connection.driver_class等
2) 创建数据模型
3) 创建持久对象
4) 编写对象和数据表的映射描述
5) 对象-关系映射xml文件 
6)、编写和业务逻辑
    持久化操作:Hibernate API
13。测试、发布
Benefits:
Performance
Lightweight
动态query
继承与多态

14。Resource:
www.hibernate.org
www.hibernate.org.cn:8000(hibernate中文网
www.sourceforge.net
www.huihu.org/com