`

Hibernate-01-持久层发展过程

阅读更多

上一篇:     下一篇:

 

先引个头,真正开发使用Hibernate也不过一年,站在只满足于业务开发角度,我总是平平而过。

 

最近想往真正架构师前行,在数据持久层上需要更加深入理解一下设计思路与原理,希望同道朋友指点与指正

 

先看看做为持久层框架应该具备的特性:(这里主要指数据库持久层的特性)

 

1,数据库操作(CRUD)进行完整的封装:

      主要指增删改查等操作。

 

2,事务机制:

      原子性,一致性,隔离性,持久性。

 

3,扩展性:

      可以新增或修改类的属性,或从一个数据库产品移植到另一个数据库产品;能满足应用开发人员与持久层管理人员开展各自的工作。

 

4,主键支持:

      主键的生成或数据库的生成方式。

 

5,游标:

     

 

6,代理:

      对象关联之间,可通过代理对象,从而现实lazy。

 

7,支持原始sql

      由于一些数据库特色,在不考虑移植性时,为提高性能而做的选择。

 

8,不同数据库的支持:

      支持多种主流数据库

 

9,多种连接池共生:

      支持多种数据库或多个数据库连接池被一个对象应该程序访问

 

10,开发语言支持:

      持久层是为应该程序服务的,支持当前开发语言。

 

11,对象与关系数据库的映射转换:

      支持从对象到关系数据库之间的映射关系。

 

12,对象与关系数据库的结构生成:

      支持通过对象或关系数据库生成映射方的文件生成。

 

13,关系遍历:

      支持对象访问子对象的遍历操作。

 

14,缓冲区:

      支持缓存,以提高性能。

 

15,锁:

      支持访问数据时,指定悲观锁或乐观锁。

 

16,支持配置:

      支持通过配置文件,载入需要的各种信息,如映射,数据库连接等。

 

 

基于以上的要求,设计一个针对数据库持久层,我们要将业务层与关系数据库分开,让两者的变化不会对对方造成直接的影响。这是根本目的,现在有一些团体在使用Hibernate时,在业务中加入操作数据库的代码设计在其中,那hibernate框架就没有原本的作用了,他的作用就是隔离,再隔离。

 

有人说直接的sql性能更好,其实性能这东西就与编程语言一样,最原始的汇编肯定是最好的;但是高级的语言如C++/Java也还可以接受。

 

使用Hibernate需要一个到sql的转换,那么,你想使用最原始的sql的性能,使用hibernate时,就要了解他的转换规则,做到这点,其实在基本的使用上,Hibernate的性能还是不会差太多,再通过设置缓存,把在查询上丢失的性能补回一些,这些优化手段,在后续再描述。

 

 

在了解数据库持久层后,如果没有现成的框架,你怎么来实现呢?想想自己的思路,试着再想想。

 

想完了,再回头来看Hibernate的设计,他在事务处理上,连接池上,映射关系上,查询转换上,缓冲(缓存)支持上,都是怎么做的?它用了哪些设计模式呢?

 

 

 

关于思路,我就不多说了,下面的02中将对hibernate的基本使用做一下描述,再通过对几大核心类的分析,从而简单的了解hibernate的运行机制。

 

先列出下面的目录

 

Hibernate-01-持久层发展过程

Hibernate-02-一般使用

Hibernate-03-运行机制

Hibernate-04-核心Configuration

Hibernate-05-核心SessionFactory

Hibernate-06-核心Session

Hibernate-07-核心Transaction

Hibernate-08-核心Query和Criteria接口

Hibernate-09-乐观锁与悲观锁

Hibernate-10-拦截器

Hibernate-11-性能-抓取策略

Hibernate-12-性能-二级缓存

Hibernate-13-性能-管理缓存

Hibernate-14-性能-原理集合性能

Hibernate-15-性能-监测

 

Hibernate-16-总结

1
1
分享到:
评论
2 楼 ciding 2012-03-08  
Jacarri_Chan 写道
你觉得hibernate的优势和劣势各是什么?  hibernate能胜任哪些场合不能适应哪些场合呢?

优势:
实现了业务层与数据层的分离,那么在系统移植,数据库迁移时,系统基本上不需要变动。
在自身的实现上,做到了可配置性,对象与关系数据库之间的映射支持全面;而且满足了系数库的事务处理机制;对数据库的支持也是全方面的;同时也支持缓存,在对hibernate有全面的了解后,再通过熟悉它的原理,从不同方向对hibernate进行优化,可以基本保证它的性能。

由于在对象映射关系数据库方面的突出表现,以及自身封装的JDBC所提供的功能,可以加快开发,以及减轻维护量。

用以开发基础平台或产品,或复杂业务系统时,表现良好。

劣势:
由于对JDBC进行了封装,对于开发人员,增加了学习成本。在进行HQL到SQL的转换,以及不可能全面支持某种数据库的所有特性(如oracle的过程,如果使用了,在迁移时就有问题,也是支持的。),由于hibernate对批量操作的实现原理是将数据先获取到内存中,或通过多次执行update语句,性能都不好(一般优化都是绕过Hiberante API来实现,或者在像oracle支持过程的数据库使用存储过程)。

根据上面的分析:
适应场合:开发产品(可以很好的支持多种环境),开发业务量大(方便维护),开发基础平台(方便扩展)。

不适合:开发小型系统(有限制的数据库,业务简单),开发有批量数据更新或插入的系统,开发业务量小性能要求高的系统,开发业务变动小系统有固定系统环境的。

也要看你关注的点,哪天,你真的想把系统开发人员的关注离开jdbc,只在业务,那就应该开始关注hibernate了。


最后要注意,hibernate的初衷是解决什么问题?
当你不了解hibernate为什么推出时,你要先进行了解,才能清楚hibernate的实现原理,它的优点,它的适应范围;它究竟解决了什么问题。这时,你再来学习hibernate,其实就已经入门了,而那些只知道使用它的人,很可能只是一个门外汉,当然我也只是一个门外汉。

1 楼 Jacarri_Chan 2012-03-08  
你觉得hibernate的优势和劣势各是什么?  hibernate能胜任哪些场合不能适应哪些场合呢?

相关推荐

    深入浅出Hibernate.pdf

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate(PDF)第一部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

    深入浅出Hibernate(PDF)第二部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出hibernate(PDF)第三部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    Hibernate Annotation笔记

    在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松。  传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载。...

    深入浅出Hibernate2

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    \深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    《深入浅出Hibernate》1

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    夏昕.深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

    S3H3 注解 DAO封装 自动创建表

    S3H3 注解 DAO封装 自动创建表 在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准。...在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. ...

    基于Web的图书馆管理系统.docx

    内容提要 本图书馆系统基于MVC设计模式,采用四层结构,主要包括:表现层、控制层、业务层、持久层。系统设计使用SSH(Struts2、Hibernate和Spring)三种框架,共分为图书检索、学生信息、通知公告、图书借阅、数据...

    javaEE_SSH土地档案管理系统设计软件源码+数据库+WORD毕业论文文档.zip

    6.4.1 持久层功能实现的介绍 32 6.4.2 持久层实现的代码 32 7 测试 34 7.1 测试目的 34 7.2 测试原则 34 7.3 测试内容 34 7.4 测试过程 35 7.4.1 登录模块 35 7.4.2 查询模块 35 7.5 测试结果 36 7.5.1 功能性 36 ...

    《面向对象编程与设计(Java)》课后作业及参考解答.pdf

    (2)J2EE 平台中的哪些开源框架 S2SH——Struts2、Spring 和 Hibernate 等表现层框架、应用层框架和持久层框架。 1.1.2 第二周 课程(9 月 11 日)的课后作业及参考解答 1、请用 Java 程序示例说明什么是 Java 中...

    整理后java开发全套达内学习笔记(含练习)

    abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n....Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv....

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    J2EE应用开发详解

    105 8.1 Web应用的发展 105 8.2 Struts2的起源和体系结构 106 8.3 Struts2核心部分详解 108 8.3.1 核心控制器FilterDispatcher 108 8.3.2 业务逻辑控制器Action 111 8.3.3 业务逻辑组件 116 8.3.4 Struts2表示层 ...

Global site tag (gtag.js) - Google Analytics