hibernate相关知识

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的运行模式,如下图:

  hibernate相关知识

  (讲师所说,不代表我的观点)说明:客户端的每一个请求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相关知识

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

  hibernate相关知识

  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(); 
  

上一篇:django 路由系统,数据库操作


下一篇:微信小程序基于腾讯云对象存储的图片上传