读Hibernate实战(2)


数据导航问题
遍历对象网络是访问面向对象的数据最自然的方式
提高数据访问代码性能,将请求数据库的次数减到最少。所以使用表联接。
只有当对象被初次访问时,所有对象持久化解决方案才提供抓取关联对象的数据的功能。这种piecemeal的数据访问在关系型数据库上下文中效率很低,因为n+1查询问题。最后,选择抓取不需要的东西到内存。
Hibernate提供了从数据库中有效,透明的抓取对象网络到应用程序中
不匹配的代价
主要成本在于模型化方面。通常扭曲领域模型和被实现的类,知道它们与SQL数据库schema相匹配。更深层的原因是JDBC API本身。JDBC和SQL提供了面向语句(命令)的方法,把数据从SQL数据库移进移出。

1.3持久层和其它层
在一个中型或大型应用程序中,按关注点(持久化、表现、工作流、业务逻辑)组织类比较有意义。表示关注点的代码层--典型面向对象的架构
1.3.1 分层架构
三层 公认高级应用程序架构 如附件所示
表现层——用户界面逻辑,负责页面及导航
业务层——负责实现业务规则或被用户理解为问题领域一部分的系统需求
持久层——负责向/从数据存储器 存/取数据的组件,必须包含一个业务领域实体的模型。
数据库——系统状态实际的持久化的表示
辅助和工具类——不是一个层,因为不遵循分层架构中中间层依赖原则
1.3.2用SQL/JDBC手工编写持久层
推荐使用已存在的优秀解决方案,满足业务需要和技术需求。
1.3.3使用序列化
java 内置的持久化机制:序列化(对象网络——>字节流)
序列化之后的关联对象网络只能作为一个整体访问;没有反序列化整个流,就不可能从流中获取任何数据。
1.3.4 面向对象的数据库系统
未广泛采用
1.3.5其他选项
XML持久化是序列化模式的变形:允许通过一个标准化的工具接口来轻松的访问数据,从而解决了字节流序列化的一些限制。但是会遇到对象/层次结构不匹配??XML对数据管理没有继承能力。

1.4 ORM(Object/Relational Mapping)——对象/关系映射
1.4.1什么是ORM
利用描述对象和数据库之间映射的元数据,自动(透明)的把Java应用程序中的对象持久化到关系型数据库中的表。
ORM解决方案包含4部分:
在持久化类对象上执行基本CRUD操作的一个API??
用于指定引用类或者类属性查询的一种语言或API
用于指定映射元数据的一种工具
用于实现ORM的一项技术,与事务对象交互,执行脏检查、延迟关键抓取及其他优化功能
使用ORM,应用程序与ORM API和领域模型类交互,从底层的SQL/JDBC中被抽象出来。
4个ORM质量等级
1.纯关系
2.轻量对象映射
3.中等对象映射
4.完全对象映射
1.4.2一般的ORM问题
对于任何数据访问技术共同的问题
事务和并发性
高速缓存管理
1.4.3为什么选择ORM
ORM和Hibernate的益处
1.生产力,Hibernate去除了很多琐碎的工作。
2.可维护性 更少的代码行,强调业务逻辑;提供了关系表示法和对象模型间的缓冲,微小的变化不会传递到另一个模型??
3.性能 在有时间限制的项目中,手工编写的持久化允许你做一些优化。Hibernate始终允许使用更多的优化。自动的持久化提高开发人员的工作效率。
4.供应商独立性 ORM将应用程序从底层的SQL数据库和SQL方言中抽象出来
1.4.4Hibernate、EJB3和JPA简介
Hibernate是一个完全的ORM工具
1.5小结


你可能感兴趣的:(sql,Hibernate,orm,网络应用,领域模型)