Hibernate进化史-------Hibernate概述

一、Hibernate概述

什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架,实现了ORMapping原理(Object Relational Mapping)。

在说hibernate之前,简单说一下什么是ORM。

ORMapping基本对应规则:(这是查到的一些资料,有些规则,还没有考究)

1:类跟表相对应

2:类的属性跟表的字段相对应

3:类的实例与表中具体的一条记录相对应

4:一个类可以对应多个表,一个表也可以对应对个类

5:DB中的表可以没有主键,但是Object中必须设置主键字段

6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系

7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样

ORMapping的基本实现方式:

使用JDBC,用SQL来操作数据库,只是看动态生成还是人工写代码来实现。

大家想想,我们以前是怎么做的?

现在Hibernate做了什么呢??它做了下图工作

如上图:Hibernate主要用来实现Java对象和表之间的映射,同时提供访问数据的CRUD方法,代替手工书写SQL语句的繁琐,降低拼写错误,这样在很大程度上减少了开发过程人工使用SQL和JDBC处理数据的时间。


适用Hibernate的优点

1.使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。

2.使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。

3.没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。

4.支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻 辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。

5、消除数据库差异。(其实可以说这是ORM的优点)Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。

当然数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。

Hibernate的另一面

任何一个事物存在两面性,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。

首先是Hibernate不适用的范围,有如下两点:

1、若是大量数据批量操作。则不适合使用Hibernate。

2、并且一个持久化对象不能映射到多张表中。

其次是“抽象”带来的“职业病”,抽象就以为这“通用性”好。那么可想而知,对于“特殊”情况,hbibernate就不擅长了。Hibernate的特长是封装太好,所以,如果想要操作适用于某类型数据库的特性,就只能“saysorry”了。

Hibernate中核心5个接口

1.Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory

2.SessionFactory接口:一个 SessionFactory对应一个数据源存储,也就是一个数据库对应一个       SessionFactory。SessionFactory用来创建 Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。

3.Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。

4.Query接口:用于数据库的查询对象。

5.Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。

  总结:Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过 程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。

基本的概念以及核心接口已经介绍,欲知后续,请听下回分解。欢迎指正。

时间: 2024-08-10 19:05:41

Hibernate进化史-------Hibernate概述的相关文章

Hibernate进化史-------Hibernate概要

一个.Hibernate概要 什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架.实现了ORMapping原理(Object Relational Mapping). 在说hibernate之前,简单说一下什么是ORM. ORMapping基本相应规则:(这是查到的一些资料,有些规则.还没有考究) 1:类跟表相相应 2:类的属性跟表的字段相相应 3:类的实例与表中详细的一条记录相相应 4:一个类能够相应多个表.一个表也能够相应对个类 5:DB中的表能够没有主键.可是

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

Hibernate检索方式概述

Hibernate检索方式概述 我们在对数据库的操作中,最常用的是select,那么使用Hibernate如何进行select操作呢?本文就来徐徐道来. Hibernate检索方式可分为5种: 导航对象图检索方式,根据已加载的对象导航到其它对象. OID检索方式,按照对象的OID来检索对象. HQL检索方式,使用面向对象的HQL查询语言. QBC检索方式,使用QBC(Query by Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口. 本

【hibernate】Hibernate面试问题集锦: 概述

Q.怎么配置Hibernate? A.Configuration类使用配置hibernate.cfg.xml(或者hibernate.properties)以及映射文件*.hbm.xml来创建(例如,配置和引导hibernate)SessionFactory,然后SessionFactory创建Session的实例.Session的实例是持久层服务对外提供的主要接口. hibernate.cfg.xml(或者你也可以使用hibernate.properties):这两个文件都是用来配置hiber

Hibernate配置文件——hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <

Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略

Hibernate 加载数据 有get,跟Load 1.懒加载: 使用session.load(type,id)获取对象,并不读取数据库,只有在使用返回对象值才正真去查询数据库. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test    public void  test1()    {        Session session = null;         try {             session = Hiber

Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在数据库中的对象的状态,类似于新New一个对象  离线状态 (detached):    数据库中存在而不被session接管  持久化状态(persistent): 对象被session管理且数据库中存在此对象 1.2. 状态之间转换关系图 2 .状态转换以及Hibernate数据库执行过程详解:

异常:org.hibernate.HibernateException: &#39;hibernate.dialect&#39; must be set when no Connection available

spring整合hibernate报了这样一个异常,一直以为是dialect参数的问题,最后发现原来是配数据源时,数据库的名字写错了....... 找了半天,重新写了配置文件没出问题,但就不知道这个文件哪里出问题了.配置文件里面这种细节一定要注意. 版权声明:本文为博主原创文章,未经博主允许不得转载. 异常:org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available

Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool

1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/development http://download.jboss.org/jbosstools/updates/stable/ 稍等一刻,选择 Hibernate tool 下一步 ,完成后重启Eclipse即可. 2.项目配置文件生成: 2.1 新建一项目,项目右键生成相关配置 然后如图: 2.2 此处需