首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate(引见二)

2012-11-21 
Hibernate(介绍二)根据上一节的介绍,我们在来说一下hibernate的主要优点吧 1:提高生产力hibernate是JDBC轻

Hibernate(介绍二)

根据上一节的介绍,我们在来说一下hibernate的主要优点吧

1:提高生产力   hibernate是JDBC轻量级的对象封装,它是一个独立的对象持久化对象,因为我们就不用在写枯燥的jdbc语句,减少编码量

2 使开发更对象化了 我们可以直接操作对象就可以了 ,像上面的小应用 我们只要sava一个对象,数据就可以存进去了。

3 移植性 我们在开发的过程中没有涉及到具体的sql语句操作,虽然sql是标准的,但是各个厂家还是有些不同,很典型的就像分页,在这里我们就用hibernate标准的API直接sava,hibernate会自动地转换成数据库的相关语句,关键是在于方言的配置,也就是适配器的配置。

4  支持透明持久化, 看上面我们的那个Users对象,它没有实现任何接口也没有继承任何类,而hibernate就给存进去了,所以对我们的Users实体来说,它没有侵入性,我们Users实体就是最纯粹的POJO对象



然而使用hibernate正确的开发模式 :

1 :先建立对象模型,这个对象模型我们可以称为领域模型

2 :建立它们映射关系

3 :根据映射关系 导出相应的表,然后再进行相应的开发操作。

这是从对象这方面来考虑的

而现实中,一般的做法都是先设计数据库表,再采用hibernate进行应用开发,这样感觉hibernate不是这么好用了,或者说是功能体现不出来,我们讲究的是以对象为中心,这样又以关系数据库为中心了,从关系转到对象  !





为什么说先以对象建模比较好呢,因为对象更能体现出现实世界的这种事物,让人更好的理解需求,包括模型,所以我们还是以对象为中心,在这个过程中都会以对象为中心,不会先建立表,在做映射,我们需要这种思维,所以我在一下的hibernate学习过程中都会以这种思想为主。



下面我再说说hibernate应用的具体流程

我们在做hibernate应用的时候,因为hibernate是以java开发的开源框架,所以我们要把相关的jar包引进来,还有相关的jdbc驱动,为了方便管理这些jar包以及下次方面导入我们可以创建自定义的User Libraries,把hibernate相关的具体jar包导进去 ,在工程中引用  具体的方式已经是hibernate介绍(一)中介绍过了

更觉hiberrnate需要我们要提供一个hibernate.cfg.xml的配置文件或者hibernate.property属性文件 当然这是现实开发中大多数采用hibernate.cfg.xml这种方式 。若果我们想跟踪hibernate细节的东西 或者为了方便调试我们最好要把log4j日子文件加进去,不然出错了它不会在控制台打印

hibernate环境搭建好了  下面就是hibernate的使用过程了,先建立实体,如果有多个或者他们之间有关系,我们还要建立它们之间的关系,这样映射关系就有了,我们一般会采用hibernate的一个工具就是hbm-ddl的一个转换,根据映射文件它会自动生成表,存储这一块我们就可以不用操心了 

表已经有了,我们开发客户端就可以了,表对我们来说是透明的,我们操作的只是对象就可以了





下面根据上面的图片 来介绍下我们开发过程中常用到的几个核心接口 



首先我们介绍在客户端开发设计到的几个对象 

configuation  它的主要作用是用来加载系统配置文件的,configuration在new完之后它只会加载.property文件 所以我们必须采用它们的方法.configure()这样它才会加载hibernate.cfg.xml文件,而这个文件时可以改名的     改完名我们可以在.configure()源码中默认的是hibernate.cfg.xml,我们该完传过去就可以了





SessionFactory  它是和数据库绑定的,一个数据库对应一个SessionFactory,也就是说这数据库里面所有的表以及表之间的映射都会放到SessionFactory中,后期会涉及到二级缓存 SessionFactroy和二级缓存相关,二级缓存是进程级的,缓存就拿我们的web开发中的application来理解就相对于它似的

SessionFactory是一个重要级的兑现,重于轻时一个相对的,因为SessinFactory对象创建时间比较耗时,所以我们这里成为重量级的,所有的SessionFactory这个对象我们最好只创建一次,不要频繁的创建,另一方面SessionFactory是线程安全的,所以说我们完全可以把它放到一个成员变量里,有多线程来调用它这样也是可以的。









session   操纵hibernate来进行CRUD操作(CRUD任务是完成数据库的交流 ,包含了很多常见的sql语句)

我们必须要理解session ,我们要记住session不同于connection我们也可以这样理解:session是对connection又做了一重包装,你open一个session的时候并不代表open一个connection只有真正用的时候它才去会拿一个connection  从连接池里去拿,我们现在上面的配置没有连接池,但是hibernate默认上实现了连接池,你可以设置连接池的大小,我们去看property文件有一个 poolsize 这个对象,而且这个链接吃还可以集成第三方连接池,像ddcp(tomcat用的)为什么说session和connection不一样呢 ,connection就是一个连接,而我们这里的session管理了缓存,所以学hibernate我们要学习它的缓存

它对我们的实体对象是一个生命周期的管理,还有我们要记住session是非线程安全的,所以说我们open一个session不能多线程恶搞来用,所以我们通常一个业务请求过来open一个session业务请求完毕,session关闭,session关了事务也就关了,因为通常一个业务请求也对应一个事务







jndi   java名称与目录接口,jndi是用于管理我们对象的 特别是ejb应用,他会把所有的ejb应用都放到jndi这颗树上,它就像一个电话薄,一个姓名对应一个电话,一个友好的字符串对应一个实例。

我们采用的tomcat连接池也是采用这种形式来做的,连接池对象注射到这个树上,以后我们拿这个串就可以了 这样我们就可以访问的到

采用jdni的好处  一个事我们对象可以统一管理。这是一方面另一方面我们不依赖于具体的实现了我们lookup来查找这样的连接池 我们不知道连接池是dbcp的实现,这个连接池我们可以换成其他的,我们连接池对我们来说是透明的  







jdbc   java的数据库链接从事务上来看  我们可以称为是本地事物,本地事物是对一个数据库起作用,但是一旦跨数据库跨其他资源这样本地事务就没法实现了 ,这样我们就可以使用jta事务 

JTA : jta是java事务的API,它实现两阶段提交协议


热点排行