Hibernate具体执行流程如下:
1 通过传过来的对象,得到类名称,然后根据这个名称,得到该目录下的对应的XML文件。
2 解析XML文件,生成相应的SQL文件。
3 应用反射,得到类中的相关字段的值。
4 进行保存
先说下hibernate工作原理:
对数据库的写操作包括保存、更新和删除,当保存一个POJO持久对象时,触发Hibernate的保存事件监听器
进行处理。Hibernate通过映射文件获得对象对应数据库表名以及属性所对应的表中的列名,然后通过反射机制
持久化对象(实体对象)的各个属性,最终组织成向数据库插入新对象的SQL insert语句。调用了
session.save()方法后,这个对象会标识成持久化状态存放在session中,对于Hibernate来说它就是一个持久化
了的对象,但这个时候Hibernate还不会真正的执行insert语句,当进行session的刷新同部或事务提交时,
Hibernate会把session缓存中的所有SQL语句一起执行,对于更新、删除操作也是采用类似的机制。
然后,提交事务并事务提交成功后,这些写操作就会被永久地保存进数据库中,所以,使用session对数据
库操作还依赖于Hibernate事务的处理。如果设置了二级缓存,那么这些操作会被同步到二级缓存中,Hibernate
对数据库最终操作也是依赖于底层JDBC对数据库进行
一 历史与背景<br>1 应用程序的分层体系结构<br><br> 随着计算机应用软件的发展,应用程序逐渐由单层体系结构发展为多层体系结构。其中,三层结构是目前典型的一种应用软件结构,如图1左。<br><br>表述层:提供与用户交互的界面,如gui(图形用户界面),web页面等;<br><br>业务逻辑层:负责各种业务逻辑,直接访问数据库,提供对业务数据的保存、更新、删除和查询操作;<br><br>数据库层:负责存放管理应用的持久性业务数据<br><br>三层结构的特点是:所有下层向上层提供调用的接口,具体实现细节对上层透明。层与层之间存在自上而下的依赖关系,即上层会访问下层的api,但下层不依赖于上层。<br><br>2 持久化层(如图1右)<br><br>(1)什么叫持久化?<br><br>分离出的持久化层封装了数据访问细节,为业务逻辑层提供了面向对象的api。<br><br>持久(persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、xml数据文件中等等。<br><br>(2)什么叫持久层?<br><br>持久层(persistence layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。<br><br>(3)为什么要持久化?增加持久层的作用是什么?<br><br>数据库的读写是一个很耗费时间和资源的操作,当大量用户同时直接访问数据库的时候,效率将非常低,如果将数据持久化就不需要每次从数据库读取数据,直接在内存中对数据进行操作,这样就节约了数据库资源,而且加快了系统的反映速度。<br><br>增加持久化层提高了开发的效率,使软件的体系结构更加清晰,在代码编写和系统维护方面变得更容易。特别是在大型的应用里边,会更有利。同时,持久化层作为单独的一层,人们可以为这一层独立的开发一个软件包,让其实现将各种应用数据的持久化,并为上层提供服务。从而使得各个企业里做应用开发的开发人员,不必再来做数据持久化的底层实现工作,而是可以直接调用持久化层提供的api。<br><br>(4)目前在持久化层领域,实现模式有以下几种:<br><br>a 业务逻辑和数据访问耦合<br><br>b 主动域对象模式<br><br>c orm模式<br><br>d jdo模式<br><br>e cmp模式<br><br><br>3 orm介绍<br><br>orm(object relational mapping),即对象关系映射。<br><br>指以o/r原理设计的持久化框架(framework),包括 o/r机制、sql自生成、事务处理和cache管理等。 <br><br>orm的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。<br><br>常用的orm中间件有:<br><br>apache ojb ( <a >
JavaBean和对应的XML文件如何关联,我的猜想是这样的:
1.通过传过来的对象,得到类名称,然后根据这个名称,得到该目录下的对应的XML文件。
2.解析XML文件,生成相应的SQL文件。
3.应用反射,得到类中的相关字段的值。
4.进行保存
前段时间,因为项目的需要,也写过一个小小的例子来实现了这样的一个过程。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....