一、Hibernate是什么:

  它是一个持久化框架,它对JDBC进行了轻量级的封装,简化对数据库的操作,提高开发效率。和另一个持久化框架MyBatis一样,他们操作数据库都是通过一个session对象来进行的,session是由sessionFactory生产的,sessionFactory是通过读取配置文件(hibernate.cfg.xml)而创建的。

二、Hibernate配置文件:

核心配置文件:hibernate.cfg.xml

  它是Hiberante的核心配置文件。在该文件里需配置要连接的数据库的URL,数据库用户信息,JDBC驱动,数据库方言(为不同的数据库提供支持),每个实体类的映射等。

映射类: *.java

  映射类中的属性和数据库表中的字段是对应的。

映射文件: *.hbm.xml

  映射类在数据库表中的映射。该文件可以通过工具自动生成。

三、Hibernate运行过程:

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();//创建SessionFactory

4.sessionFactory.openSession();//打开Sesssion

5.session.beginTransaction();//创建事务Transation

6.persistent operate持久化操作 //一般指Save这个方法

7.session.getTransaction().commit();//提交事务

8.关闭Session

9.关闭SesstionFactory

四、Hibernate事务管理:

  在刚开始学Hibernate时你一定很疑惑为什么在操作数据时要创建事务?

  为什么呢?

  其实事务是程序执行的单元,表示这段代码要么全做完,要么不做。在实际场景中有很多应用,例如A银行卡往B卡里转账100元这件事,首先应当在数据库里给A卡减100,然后往B卡里增加100。但是如果程序运行到中间突然被迫中断,那么会出现A少了100,而B没收到钱的结果,显然这种情况出现是种灾难。而用了事务Transaction之后的情况是这样的:

  首先开启事务(tran=session.beginTransaction()),使接下来操作数据库等动作成为一个不可分割的整体执行单元;然后操作数据库;然后提交事务(tran.commit())。若动作在执行过程中遇到了问题或者突然中断,此时需要回滚事务(commit.rollback()),回到所有动作执行前的状态。加入转账时突然中断,则事务回滚的意思就是说虽然B卡还没收到钱,但是A卡也不会少100元。

  这里需要说明的是Hibernate是对JDBC的轻量级封装,它本身没有事务管理能力,所以Hibernate事务管理底层是由JDBC Connection或JTA(Java Transaction API)实现的。他们两者的最大的区别是JDBC Connection实现的事务管理是connection生命周期内的,也就是单数据源的,对数据库的操作只能由一个session完成,再关闭session.close()前必须tran.commit();但是JTA不同了,它是用于分布式跨数据库的情况中,可以操作多个数据库,也就是说可以有多个session。等session1和session2两个对数据库的操作都完成后再提交事务。

  JDBC事务是由Connection控制的,但JTA事务是由容器内的事务管理器管理的,但Tomcat是不能管理JTA容器的,所以若使用JTA事务,一般用Weblogic,JBoss等容器。

public void saveUser(){

    Session session1 = sessionFactory.openSession();
Transaction tran = session.beginTransaction(); session1.save(user1);
session1.close(); Session session2 = sessionFactory.openSession();
session2.save(user2);
session.close(); tran.commit(); //等session1和session2两个对数据库的操作都完成后,再提交事务。

 五、Hibernate的缓存机制:

这两篇博客整理得很好:

  http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html

  http://www.cnblogs.com/jifeng/archive/2013/03/03/2941189.html

Hibernate知识总结(一)——Hibernate原理概述的更多相关文章

  1. Hibernate知识总结(一)

    一.ORM ORM的全称是Object/Relation Mapping,即对象/关系映射,可以将其理解成一种规范,它概述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的映射.可以把ORM看 ...

  2. HIBERNATE知识复习记录1-连接及常用方法

    要去面试了,复习一下HIBERNATE的相关知识吧,原来边看视频边写的代码如下,已经分不清先后次序了,大致看一看吧. 先看下总的配置文件hibernate.cfg.xml: <?xml vers ...

  3. Hibernate核心接口和工作原理

    Hibernate核心接口和工作原理 Hibernate有五大核心接口,分别是:Session .Transaction .Query .SessionFactory .Configuration . ...

  4. HIBERNATE知识复习记录4-HQL和QBC

    Hibernate中共提供了三种检索方式:HQL(Hibernate Query Language).QBC.QBE(Query By Example). HQL 是Hibernate Query L ...

  5. HIBERNATE知识复习记录3-关联关系

    先上一张图,关于几种关系映射: 抄一段解释: 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.关联关系分为上述七 ...

  6. HIBERNATE知识复习记录2-继承关系

    发现了一篇和我类似的学习尚硅谷视频写的文章,内容如下,比我说的详细全面,可以看一下: [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , jo ...

  7. Hibernate入门第一讲——Hibernate框架的快速入门

    Hibernate框架的概述 什么是框架? 框架指的是软件的半成品,已经完成了部分功能. JavaEE开发的三层架构 了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经 ...

  8. Hibernate 系列 03 - 使用Hibernate完成持久化操作

    引导目录: Hibernate 系列教程 目录 康姆昂,北鼻,来此狗.动次打次,Hibernate继续走起. 目录: 使用Hibernate实现按主键查询 使用Hibernate实现数据库的增.删.改 ...

  9. 新手上路之Hibernate:第一个Hibernate例子

    一.Hibernate概述 (一)什么是Hibernate? Hibernate核心内容是ORM(关系对象模型).可以将对象自动的生成数据库中的信息,使得开发更加的面向对象.这样作为程序员就可以使用面 ...

  10. Hibernate笔记一:HIbernate配置-HelloWorld

    hibernate介绍: Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 它不仅提供了从java类到数 ...

随机推荐

  1. ubuntu 下 apache+tomcat整合_(mod-jk方法)[转]

    整合的平台是Centos5环境如下: apache源代码包: httpd-2.2.11.tar.gz  下载地址http://labs.xiaonei.com/apache-mirror/httpd/ ...

  2. zepto打造一款移动端划屏插件

    效果图 样式1 样式2 调用 正常情况下应该是后台生成的html代码,但还是写了一套操作tab页的方法 调用简便如下: <link rel="stylesheet" href ...

  3. Entityframework 伪CodeFirst开发模式应用于Sqlite数据库

    因为最近没有时间深入的研究EntityFramework的内部机制,所以具体的实现并不十分了解.微软最初的初衷是开发出一套通用的数据库访问逻辑,实现对Dal数据访问层的高度封装,其中就用到了工厂模式和 ...

  4. JS函数作用域及作用域链理解

    从事web开发工作,尤其主要是做服务器端开发的,难免会对客户端语言JavaScript一些概念有些似懂非懂的,甚至仅停留在实现功能的层面上,接下来的文章,是记录我对JavaScript的一些概念的理解 ...

  5. js call方法介绍

    call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...

  6. 出现"无法连接synaptics定点装置驱动程序"

    "开始“--”运行“--regedit(打开注册表)--依次打开 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVERSION/R ...

  7. linux chmod使用说明

    chmod是用来改变一个目录的访问权限的,一般的方式是:chmod a+rwx 其中a代表全部,还有u[目录拥有者] ,g[目录拥有组],o[其他用户] r代表读,w代表写,x代表可以执行,对应数字权 ...

  8. CSS 实现底部固定

    在制作页面有这样一种现象:当一个HTML页面中含有较少的内容时,Web页面的“footer”部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,让你的页面看上去很不好看,特别是现在宽屏越来越 ...

  9. 非阻塞IO

    设置描述符非阻塞的两种方法: 1,调用 open 时,设置,O_NONBLOCK; 2,调用 fcntl设置: 具体如下: ,open("/xxx/file1",O_RDWR|O_ ...

  10. 搞了一个独立博客,请各位光临pingworld.cn

    嘿嘿,每次在一个大网站上建立自己的博客后总是没有动力持续更新下去,回想其原因很大是因为没有一个自己的地盘,懒得维护!还有一个原因就是自己也没有什么干货值得跟大家分享. 随着工作的时日见长,有了各种各样 ...