Hibernate学习总结(2)

3.Hibernate核心接口

3.1Configuration接口

Configuration对象用来配置和引导Hibernate,一个Hibernate应用使用一个Configuration实例来指定主配置文件的位置,然后创建会话工厂。
Configuration cfg = new Configuration().configure("/cfg/auction.cfg.xml")

在我们的代码中,配置文件是自动探测的,Configuration cfg = new Configuration().configure();configure()方法未带参数的时候,Hibernate会在classpath的根路径搜索名为hibernate.cfg.xml的文件,如果没有找到将会抛出异常。这就是为什么我们要将Hibernate主配置文件命名为hibernate.cfg.xml,并且将其放在src目录下(src目录映射到编译后的classpath根路径)的原因。

3.2SessionFactory接口

一个Hibernate应用从SessionFactory(会话工厂)里获得会话实例。
一般情况下,整个应用只有唯一的一个SessionFactory,它应该在应用初始化时被创建。

它是一个重量级、单实例接口,创建时消耗资源较多,而且它只需要存在一个对象就够了。可以编写一个工具类,将SessionFactory的实例设置为静态成员(只在内存中存在一份)并将其初始化放在静态初始化块中(只执行一次)。例如:

import org.Hibernate.SessionFactory;
import org.Hibernate.cfg.Configuration;
import org.Hibernate.service.ServiceRegistry;
import org.Hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
 private static SessionFactory sessionFactory;//静态变量
 static {//静态初始化块
  try {
   Configuration cfg = new Configuration().configure();
                    //Hibernate4提供的新方式
   ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
     .applySettings(cfg.getProperties()).buildServiceRegistry();
   sessionFactory = cfg.buildSessionFactory(serviceRegistry);
  } catch (Throwable ex) {
   throw new ExceptionInInitializerError(ex);
  }
 }
 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }
 public static void shutdown() {
  getSessionFactory().close();
 }
}

3.3Session接口

Session(会话)接口是Hibernate应用使用的主要接口,它拥有操作持久化对象的一系列API,可用于管理(例如加载和保存)对象,因此我们也称之为“持久化管理器”。
Session实例是轻量级的,创建与销毁的代价不昂贵,通常我们会为每个事务创建一个Session实例,并在使用后关闭它。

3.4Transaction接口

Transaction(事务)接口是对实际事务实现的一个抽象,这些实现包括JDBC事务或者JTA事务等。
在Transaction接口中主要定义了commit()和rollback()两个方法,前者是提交事务的方法,后者是回滚事务的方法。

3.5Query接口

Query(查询)接口允许在数据库上执行查询,并控制查询如何具体执行。查询使用HQL或SQL。Query实例可用来绑定查询参数,限定查询返回的结果数,并且最终执行查询。

4.Hibernate中实体对象的三种状态

实体对象的生命周期是Hibernate 应用中的一个关键概念
实体对象的三种状态:
(1)瞬时状态(Transient)
刚用new语句创建,还没有被持久化,且不处于Session的缓存中
(2)持久状态(Persistent)
已经被持久化,且加入到Session的缓存中
(3)游离状态(Detached)
已经被持久化,但不再处于Session的缓存中

app操作对象状态,在某一时刻,Hibernate会将对象状态同步到数据库
瞬时对象的状态的改变不会被同步,直到它变成一个持久状态
游离对象的状态的改变不会被同步,直到它变成一个持久状态

实体对象的三种状态的转换:

new产生的对象—瞬时态通过save saveOrUpdate方法转换为持久态,通过delete方法可以将对象变回瞬时态;

开始通过get()、load()方法等进入持久态;
通过evict()、clear()方法或session关闭之后,原有的持久态就变成了游离态,游离态通过update()、saveOrUpdate()、lock()方法可重新回到持久态,并在事务提交的时候和数据库同步session的get load()方法可直接获得一个持久态对象;

持久态和游离态的共同点在于,都有数据表的一行与之对应,不同的是,持久态在session范围内(在缓存区中),而游离态不在session范围内。

其中evict()方法是清除缓存中的指定对象或集合、clear()方法是清空缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值