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

《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();
    }

    }

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

Hibernate核心如下图所示

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

《Hibernate学习笔记四》:Hibernate核心接口介绍_第1张图片

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

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视频):

《Hibernate学习笔记四》:Hibernate核心接口介绍_第2张图片

4、Transaction:用于操作事务。

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

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

参考资料

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

你可能感兴趣的:(Hibernate,核心接口)