《Hibernate学习笔记四》:Hibernate核心接口介绍

来源:互联网 发布:淘宝邮箱登录格式 编辑:程序博客网 时间:2024/06/05 10:01

《Hibernate学习笔记四》:Hibernate核心接口介绍

在前面的例子中,我们经常看到这样的代码:

public class TeacherTest {    private static SessionFactory sf=null;    @BeforeClass    public static void beforeClass(){        //读取配置 文件 hibernate.cfg.xml        Configuration cf= new Configuration().configure();        sf=cf.buildSessionFactory();    }    @Test    public void testSaveTeacher() {        //获取 Session        Session session=sf.openSession();        //开启事务         session.beginTransaction();        Teacher t=new Teacher();        t.setId(2);        t.setName("zhangsan");        t.setTitle("professior");        //对持久化对象 进行 增删改查 操作         session.save(t);        session.getTransaction().commit();          session.close();    }    @AfterClass    public static void afterClass(){        sf.close();    }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

代码中有Configuration、SessionFactory、Session、Transaction等的应用。就是由他们构成了Hibernate的核心,即有了他们,我们才不需要操作那些复杂的SQL数据库语句。而是通过他们来帮助我们完成对象的持久化操作。

Hibernate核心如下图所示

Hibernate 核心有2个配置文件和4大接口构成。

下面对这些接口和配置文件做一个简单的介绍

1、Configuration:用于启动和配置Hibernate。

说的更加详细点,Configuration有以下几点作用:1)进行配置信息的管理 2)用其buildSessionFactory()方法来产生SessionFactory 3)可以在configure方法中指定hibernate配置文件,默认情况下是读取hibernate.cfg.xml,如果我们的配置文件不叫这个名字,则需要将这个配置文件传入到这个configure(”XXX.cfg.xml”)。

2、SessionFactory:用于初始化Hibernate。维护着数据库的连接池,当产生一个Session时,就分配一个数据库的连接给它。

SessionFactory有如下两种方法获取Session对象。

Session session=sessionFactory.openSession();

这种方法每次都是打开一个新 Session。因此需要手动 session.close();

而还有一种方法:

Session session=sessionFactory.getCurrentSession();

此种方法并不是每次都是获取一个新Session,而是从上下文找,如果存在Session,则就用旧的session,否则获取一个新的Session。这种方法的用途:界定事务边界。当事务提交时自动close。

使用getCurrentSession()从上下文来找,因此,在hibernate.cfg.xml中要设置这样一行代码:

<!-- Enable Hibernate's automatic session context management --><property name="current_session_context_class">thread</property>

current_session_context_class的取值还可以去jta、manager等,其中jta从分布式来建立Session,即用于多个数据库来处理事务。

3、Session:用于持久化对象的CURD(即增删改查)操作。 
主要的方法有:1)save() delete() update() load get等方法。想查看更多的方法,可以查看Hibernate的API.

关于Session,不得不介绍对象的3种状态transient、persistent、detached。

这三种状态的主要区别在于:1)有没有ID,2)ID在数据库中有没有 3)在内存中有没有(session 缓存)

1、transient:内存中有一个对象,没有ID,缓存中也没有ID

2、persistent:内存中有,缓存中也有,数据库中也有(ID)

3、detached:内存中有,缓存中没有,数据库中有。

三种状态更具Session调用不同的方法的状态转化图如下(图片来源于马士兵Hibernate视频):

4、Transaction:用于操作事务。

5、hibernate.cfg.xml:用于存放配置数据库连接相关的信息,例如:使用的驱动、方言等

6、XXX.hbm.xml:是一个映射文件,用于实体类和数据库表之间进行映射。

参考资料

1、马士兵《Hibernate视频讲解》


from: http://blog.csdn.net/u010412719/article/details/51277669