您的位置:首页 > 其它

Hibernate 常用类简单介绍

2016-01-24 22:03 162 查看
一、Hibernate执行流程

在介绍Hibernate使用过程之前,先简单介绍下Hibernate执行的一般流程:

第一阶段是配置阶段,这一阶段的主要任务是形成与数据库的连接,笔者用的是MySQL数据库,所以配置过程就是使用JDBC套件连接上数据库,并获取连接(Connection)的过程。

第一阶段的代码如下:

/*创建配置对象*/
Configuration config = new Configuration().configure();
/*创建服务注册对象*/
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
/*创建会话工厂对象*/
sessionFactory = config.buildSessionFactory(serviceRegistry);
首先,配置Configuration来获取获得连接数据库配置的设置类,然后,配置ServiceRegistry 类来进行服务注册,注册参数使用config.getProperties()获取,最后,通过服务注册对象来创建会话工厂。

注意Hibernate创建session是使用工厂模式去创建的,在SSH框架中,很多地方都使用了工厂模式。关于工厂模式,笔者会在之后的文章中讲解,这里不做赘述,读者请自行了解。

第二阶段是使用阶段。在这一阶段,有两个主要任务:获取session会话,通过session实现对数据库的操作指令;获取transaction事务,通过transaction来控制session的提交,回滚等操作。可以获取多个session,但要注意,一个session一般对应一个transaction。

       第三阶段是结束阶段。当完成数据库的操作后,调用transaction.commit()提交transaction,并且调用session.close()关闭session。这一阶段结束后,对数据库的操作才能成功。如果没有提交事务,那么操作是无效的,如果不及时关闭session,那么可能会产生大量的冗余会话,占用服务器的空间。

以上三步执行完成后,hibernate的配置基本完成。

二、Session类介绍

Session对象一般由sessionFactory产生。在实际开发中,使用openSession()和getCurrentSession()两个方法来产生session对象。其中,getCurrentSession()对象需要在Hibernate.cfg.xml文档中配置默认使用的session。

两个方法最大的区别在于获取的session的重复性,openSession()方法获取的session是不同的,具有不一样的hashcode,两个session独立操作。而getCurrentSession()方法获取的session是唯一的。也就是说,如果使用多个引用指向getCurrentSession()方法获取的session,一旦一个引用调用了flush()方法,或者一个引用的事务提交后,其他引用中的操作也会自动提交。所以实际情况中,使用getCurrentSession()的情况较少。

另外强调一点,hibernate中的session都采用手动提交方式。只有在flush或者事务提交后,才会进行对数据库的操作。如果要采用自动提交方式的话,必须调用dowork方法,重写一个自动提交的work即可。但实际开发过程中不推荐这么做。

三、Transaction类介绍

Transaction事务对象一般由session对象调用beginTransaction()方法产生。主要负责执行对数据库的操作。一个transaction中包含了多条对数据库的操作,这些操作要么全部执行,要么都不执行。

hibernate中事务通常分为两类:jdbc事务和jta事务:前者是和数据库一对一的关系,即一个transaction中,只包括对单一数据库的操作。而后者则是和数据库一对多的关系。即一个事务中,包含了对多个数据库的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: