1.为什么要用Hibernate

  JDBC的优点
    直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。
  JDBC的缺点
    因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
    操作比较繁琐,很多代码需要重复写很多次。
    如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。
    JDBC的程序操作可以封装一些什么内容?又不可以封装哪些内容?

  Hibernate优点

    Hibernate实现了面向对象的数据库编程
    Hibernate比起JDBC来,在代码的书写上比较简单化了。
    Hibernate提出了缓存机制,这样可以使访问数据的效率提高很大。
  Hibernate缺点:
    SQL语句是由hibernate生成的,程序员不能干涉生成sql语句,这就造成了优化比较困难。
    在大量数据的条件下,hibernate的执行效率是比较低的。

2.Configuration 类

  Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:
    Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
    持久化类与数据表的映射关系(*.hbm.xml 文件)

  创建 Configuration 的两种方式:

    属性文件(hibernate.properties):

      Configuration cfg = new Configuration();
    Xml文件(hibernate.cfg.xml):
      Configuration cfg = new Configuration().configure();
    第二种创建方式较为常见。Hibernate.cfg.xml文件默认的目录为系统的根目录

3.SessionFactory类:
  》在hibernate容器起作用的时候,sessionFactory这个类存放了配置文件、映射文件、及持久化的一些信息
  》sessionFactory类是一个重量级别的类
  》sessionFactory类存放了数据库操作的所有的信息
  》一个数据库只能存在一个sessionFactory
  》在hibenernate中,加载配置文件、映射文件、持久化类只需要加载一次
  》sessionFactory是线程安全的
  》sessionFactory是由单例模式来产生的

  SessionFactory是生成Session的工厂: 
    Session session = sf.openSession();
    构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。

4.Session是线程级别的
  》当客户端每访问一次,就起一次session

  关于session的运行模式,如下图:

  

  (讲师所说,不代表我的观点)说明:客户端的每一个请求sessionFactory都会产生一个session,为了保证操作的原子性,数据放入session中,设计者把session放到一个ThreadLocal(是一个线程类,有个特点,只有当前线程能够访问,其他线程访问不了)中,这样的话,就把不同的session区分开来,从而保证了数据的安全。

  getCurrentSession和openSession的区别:
    getCurrentSession 从当前线程中获取Session对象,只要事务提交以后,session会自动关闭,不需要程序显示得去关闭
    需要在hibernate.cfg.xml添加对应的配置
      <property name="current_session_context_class">thread</property>
    openSession 不一定时从当前线程中获取Session对象,事务提交以后,必须关闭session

  在Hibernate中,Transaction tx = session.beginTransaction()相当于给数据库操作起事务。Session.commit()则为提交事务。

5.Hibernate的整个运行过程

  hibernate 包括如下4个部分

  》配置文件,用于指明连接数据库所需要的参数
  》映射文件
  》持久化类
  》API

  对应的加载顺序,有下面一幅图:

  

  另一比较好的流程图如下:

  

  Hibernate的整个运行过程如下:

  1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,
  2、并用这些信息生成一个SessionFactory对象,
  3、然后从SessionFactory对象生成一个Session对象,
  4、并用Session对象生成Transaction对象;
    A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;
    B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

  源码中实现的过程如下:

  Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。

  Configuration cfg = new Configuration().configure();
  SessionFactory sf = cfg.buildSessionFactory(); 
  

hibernate相关知识的更多相关文章

  1. spring事务管理及相关知识

    最近在项目中遇到了spring事务的注解及相关知识,突然间感觉自己对于这部分知识只停留在表面的理解层次上,于是乎花些时间上网搜索了一些文章,以及对于源码的解读,整理如下: 一.既然谈到事务,那就先搞清 ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  4. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  5. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  6. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  7. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  8. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  9. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

随机推荐

  1. 关于Java(不同工具或平台与“Hello World”)

    对于任何编程语言,都最常见的入门应用: Hello World NetBeans 和 “Hello World” 编写 Java 程序前,先要准备好: Java SE Development Kit ...

  2. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57

    转自: ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57 前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列 ...

  3. 【网络流24题】 No.2 太空飞行计划问题 (最大闭合权图 最大流 )

    原题:         W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 E={E1,E2,...,Em},和进行这些实验需 ...

  4. bzoj1004

    等价类计数问题首先要构造出群 首先,给出的洗牌法就相当于置换, 再加上置换(1)(2)(3)……(n),可以构成一个包含m+1个置换的置换群: 这里要解释一下构成置换群的四个条件 封闭性 任意两个置换 ...

  5. ☀【CSS3】形状

    CSS3shapeshttp://www.css3shapes.com/ <!DOCTYPE html> <html lang="zh-CN"> <h ...

  6. 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具

    发布于 2013-12-04 作者 Eduard Koller 这次为我们使用Linux 的朋友带来了更多关于部署云上虚拟机的消息.今天,微软开放技术有限公司 (MS Open Tech),想与大家分 ...

  7. JavaScript实现网页背景自动变色

    JavaScript实现网页背景自动变色,自己变换颜色,设定时间和颜色值即可,在你设定的颜色值.一定时间内自动切换网页背景颜色. <!DOCTYPE HTML PUBLIC "-//W ...

  8. 搭建Git远程仓库(也就是Git服务器,不用再连Github了)

    github上一般托管的代码都是公开的,任何人都可以查看.复制下载等,而私有的项目则需要付费.所以可以自己搭建一个git服务,自己人用. 首先安装git: sudo apt-get install g ...

  9. 微软原版SQLHelper类

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...

  10. AppStore IAP 客户端校验代码

    -(BOOL)putStringToItunes:(SKPaymentTransaction*)transaction { NSData * iapData = transaction.transac ...