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

  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():  检查事务是否提交
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,475评论 9 66
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,965评论 0 27
  • 目录 1. Hibernate框架的概述 1.1 Hibernate简介 1.2 为什么要学习Hibernate ...
    深海鱼Q阅读 1,020评论 0 14
  • hibernate(20170731) 1.导包:hibernate-distribution-3.5.6-Fin...
    潇湘雨smile阅读 539评论 0 0
  • 本文包括:1、Hibernate的持久化类2、Hibernate 持久化对象的三个状态(难点)3、Hibernat...
    廖少少阅读 1,451评论 0 13