美文网首页
Hibernate 执行流程(核心API使用)

Hibernate 执行流程(核心API使用)

作者: 年少懵懂丶流年梦 | 来源:发表于2017-02-24 16:17 被阅读91次
  1. 配置对象Configuration
    作用:读取配置文档:Hibernate.cfg.xml;
  2. 创建SessionFactory对象
    作用:读取相应的里面加载的对象关系映射文件
  3. 创建session文件
    作用:类似于JDBC中的Connection,这个session对象等同于连接对象
    执行增删改查:save,delete,update,createQuery等。
  4. 执行某个session对象的方法的时候,必须开启一个事物transaction,这些方法需要封装在事物当中。
  5. 执行完成方法之后,需要提交事务并且关闭session
    transaction.commit();
    session.close();

session与connection是多对一的关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。

Configuration类(管理Hibernate的配置信息)

Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:

  • 加载hibernate.properties 和 hibernate.cfg.xml
  • 持久化类与数据表的映射关系(*.hbm.xml文件)

创建Configuration 的两种方式:

  • 属性文件(hibernate.properties):
    Configuration cfg = new Configuration(); //手动加载hbm

  • Xml文件(hibernate.cfg.xml)
    Configuration cfg = new Configuration().configure();

在核心配置文件中引入映射配置文件:

  • 之前做法:
 <!-- 引入映射配置文件 -->
<mapping resource="com/meng/entity/Users.hbm.xml" />
  • 还有另外方式加载映射配置文件(了解)

SessionFactory接口(获取Session对象)

Configuration对象根据当前的配置信息生成SessionFactory对象

  • SessionFactory对象中保存了当前数据库配置信息和所有映射关系以及预定义的SQL语句
  • SessionFactory对象是线程安全的
  • SessionFactory还负责维护Hibernate的二级缓存
Configuration configuration = new Configuration().configure();

创建sessionFactory

SessionFactory sessionFactory = configuration.buildSessionFactory();

可以通过SessionFactory对象 获得Session对象

Session session = sessionFactory.openSession();
或者
Session session = sessionFactory.getCurrentSession();

openSession与getCurrentSession的区别

  • openSession 每次使用都是创建一个新的session;getCurrentSession 是获取当前session对象,连续使用多次时,得到的session都是同一个对象。
  • getCurrentSession在事物提交或者回滚之后会自动关闭;而openSession需要手动关闭,如果使用openSession而没有手动关闭,多次使用之后会导致连接池溢出。
  • 一般在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务,所以在一般情况下比较少使用openSession。

构造SessionFactory 很消耗资源,一般情况下一个应用只初始化一个

Session接口(CRUD操作)

  • 调用Session里面的方法,实现crud操作。
  • Session是单线程对象,只能有一个操作时候,不能同时多个操作使用,不要把Session变量定义成成员变量,每次使用都创建新对象,相当于JDBC的Connection。
  • Session是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心;Session是线程不安全的。
  • 所有持久化对象必须在Session 的管理下才可以进行持久化操作。
  • Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处。
  • 持久化类与 Session 关联起来后就具有了持久化的能力。

常用方法

Transaction接口(事务)

代表数据库操作的事务对象

  • hibernate对数据库的操作都是封装在事物transaction当中,并且默认是非自动提交的方式,所以用session保存对象时,若不开启事务,并手工提交事务,对象时不会保存到数据库当中的。
  • 如果你想让Hibernate向jdbc那样自动提交事务,可以不开启事物,用session的doWork()方法,并设置自动提交事务,在保存对象之后,记得用session.flush();来输出SQL语句,不然对象也是不会保存到数据库中的。但一般是不建议用第二种方法,都是用事物来封装对数据库的操作。
          Session session = sessionFactory.getCurrentSession();
          // 写添加逻辑
          // 项数据库设置值
          Users user = new Users();
          user.setUsername("siru");
          user.setPassword("654123");
          session.doWork(new Work() {
              
              @Override
              public void execute(Connection connection) throws SQLException {
                  connection.setAutoCommit(true);
              }
          });
           session.save(user);
           session.flush();
    

开启事务

Transaction transaction = session.beginTransaction();

提供事务管理的方法:
- commit():  提交相关联的session实例
- rollback():  撤销事务操作
- wasCommitted():  检查事务是否提交

相关文章

  • Hibernate 执行流程(核心API使用)

    配置对象Configuration作用:读取配置文档:Hibernate.cfg.xml; 创建SessionFa...

  • Hibernater学习笔记(二)

    hibernate核心api 1.Configuration 在src下面找名称为hibernate.cfg.xm...

  • Hibernate核心API

    一、session session可以理解为操作数据库的对象session的特点:线程不安全 1、把对象保存在关系...

  • Hibernate核心API

    在这一节中,我主要介绍下面的内容: Session介绍 Save和Update 实体对象的识别 Hibernate...

  • Hibernate执行流程

    首先创建配置对象Configuration,读取配置文档Hibernate.cfg.xml 创建SessionFa...

  • Hibernate进阶

    1、Hibernate.cfg.xml常用配置 2、Hibernate执行流程 3、hbm配置文档常用设置 Hib...

  • hibernate

    介绍 hibernate配置文件说明 基本使用代码一 基本使用代码二 API 持久化类的状态 Hibernate的...

  • Hibernate

    一、执行流程 二、介绍Hibernate(扯皮) 1.Hibernate 是一个持久化框架 (1)从狭义的角度来讲...

  • Hibernate小结

    1、Hibernate 1、简介 基于ORM 2、基本使用步骤 1、引入Hibernate核心jar包 Hiber...

  • Hibernate从入门到应用

    Hibernate API简介 Hibernate API对 JDBC API 进行封装,提供面向对象的数据库访问...

网友评论

      本文标题:Hibernate 执行流程(核心API使用)

      本文链接:https://www.haomeiwen.com/subject/ffjhwttx.html