美文网首页
Hibernate 基本知识点

Hibernate 基本知识点

作者: SYFHEHE | 来源:发表于2017-08-14 15:03 被阅读0次

1. sessionFactory

顾名思义,sessionFactory,就是用来创建session会话的工厂。想想有一个特别大的工厂,专门用来在你需要使用session的时候,让它帮你创建一个就好了。

  • 用来产生和管理session。
  • 通常情况下每个应用只需要一个sessionFactory。
  • 除非访问多个数据库的情况。

SessionFactory重量级的,一个线程中只能有一个,并且是线程安全的。Hibernate的Session线程不安全,故不能在多个线程中共享。

  • 关注两个方法:
名称 区别
openSession() 1.永远创建新的session。2.在单线程环境中,它比getCurrentSession慢。3.需要显式刷新和关闭会话对象。4.不需要配置任何属性来调用此方法。
getrCurrentSeesion() 1.commit之前还是原来的,commit之后新建一个session, 但是不用close session, Hibernate会帮你完成。2.您需要配置其他属性。 “hibernate.current_session_context_class”来调用getCurrentSession方法,否则会抛出异常。

hibernate.current_session_context_class有几个取值:

  1. jta: 分布式事物 (Java Transction API)
  2. thread: 线程事物管理,一般但数据库的项目采用这个配置。
<property name="hibernate.current_session_context_class">thread</property>
  1. managed:用的不多。
  2. a custom class implementing org.hibernate.context.spi. CurrentSessionContext

2. 对象的三种状态

对象的三种状态.png

三种状态:

1.瞬时状态(Transient)
通过New创建对象,对象没有立即持久化,此时Java对象的状态为瞬时状态。Session对瞬时状态的java对象是一无所知的,此对象不在被别的对象引用时,java虚拟机会在一定时间段回收次对象。
2.持久状态(Persistent)
当对象与Session关联,被Session管理时,该对象就处于持久状态。
3.游离状态(Detached)
处于持久状态的对象,脱离与其关联的Session管理后,对象就处于游离状态。

判断方法:

  • Transient:内存中有一个对象,缓存中没有,数据库中也没有。
  • Persistent:内存有,缓存有,数据库有。
  • Detached:内存有,缓存没有,数据库有。

状态转换:

  • 瞬时状态转为持久状态
    通过Session对象的save()、saveOrUpDate()方法保存对象或者使用get()、load()方法获取对象。
  • 持久状态转为瞬时状态
    执行Session的delete()方法后,对象由持久状态转为瞬时状态。
  • 持久状态转为游离状态
    执行Session的evict()、clear()、close()方法,对象由持久状态转为游离状态。
  • 游离状态转为持久状态
    重新获取Session对象,执行Session对象的update()、saveOrUpdate()方法将对象从游离状态变为持久状态,也就是说通过这两个方法,可以将对象重新与Session关联。
  • 游离状态转为瞬时状态
    执行Session的delete()方法。

3. Hibernate 核心API

3.1 flush()

  • session.flush() : 让一级缓存与数据库同步
  • session.evict(arg0) : 清空一级缓存中指定的对象
  • session.clear() : 清空一级缓存中缓存的所有对象

3.2 clear()

  • 批量操作使用使用:
  • Session.flush(); // 先与数据库同步
  • Session.clear(); // 再清空一级缓存内容

3.3 get()

  • 立即发送Sql语句

3.4 load()

  • 不立即发送Sql语句
  • 生成的是代理对象
    具体的差别可以参考以下链接:Hibernate的get和load

3.5 update()

如果想修改对象的单个属性不是全部更新的话:

  • xml设定property标签为dynamic-update, annotation没有对应属性;
  • 不同的session之间,可以用 merge()方法;
  • HQL也可以

相关文章

  • Hibernate 基本知识点

    1. sessionFactory 顾名思义,sessionFactory,就是用来创建session会话的工厂。...

  • hibernate

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

  • Hibernate入门1-基本用法

    Hibernate 快速入门1 - 基本用法 Hibernate简介 ORM:对象关系映射(ORM, Object...

  • Hibernate 框架学习

    Hibernate 复习 基本演示: hibernate创建的 java 工程,需要的 jar包: hiberna...

  • Hibernate的基础

    1.Hibernate的基本使用方式 1.Hibernate是一个对象关系映射框架 2.Hibernate的命名规...

  • hibernate(五)[配置文件详解]

    Hibernate中配置主要分为两种:一种包含了Hibernate与数据库的基本连接信息,在Hibernate工作...

  • Hibernate小结

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

  • SSH三大框架整合

    一.SSH三大框架整合知识点 1.全部知识点: Spring、Struts2 以及 Hibernate的整合思想。...

  • Hibernate基本使用

    MVC和分层架构 持久层的设计理念 - DAO = Data Accessor + Active Domain O...

  • Hibernate基本用法

    1、Hibernate注解 2、HQL查询 执行HQL查询的步骤:1、获得 Hibernate Session 对...

网友评论

      本文标题:Hibernate 基本知识点

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