Hibernate的工作流程及SessionFactory的理解

Hibernate是一款ORM全自动框架。其优点是提高了开发效率,使得操作数据库的时候,可以以面向对象的方式来完成,不需要书写SQL语句。

ORM: Object Relational mapping  对象关系映射

Hibernate的工作流程:

工作流程:

1.读取并解析配置文件。[ 创建Configuration实例,其构造函数将配置文件(Hibernate.cfg.xml)读入到内存。一个Configuration实例代表Hibernate所有java类到数据库映射的集合。]

2. 创建SessionFactory类的实例,把Configuration对象中所有配置信息复制到SessioFactory的缓存中。SessionFactory的实例代表一个数据库存储源,创建之后将不会再与configuration对象关联。

3. 调用SessionFactory创建Session对象的方法。

4. 通过Session接口提供的各种数据库操作的方法来操纵数据库访问。

5. 执行完数据库操作之后,提交数据库操作的结果。

6. 关闭Session对象。

SessionFactory

       是一个单实例对象,是线程安全的,所有由该工厂生产的session都共享工厂中维护的数据。多个线程同时访问时,不会出现线程并发问题,它还用于缓存配置信息(数据库配置信息,映射文件,预定义HQL语句等)SessionFactory用锁机制确保每次只释放一个session对象。

       SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。

 Session是一个轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一个工作单元。

     注意: 

     1> getCurrrentSession();该方法获取的是与当前线程绑定的session,获取的是同一个session,需要在主配置中添加配置,而且不需要手动关闭session。

<property name="hibernate.current_session_context_class">thread</property>

2>   openSession();每次获取的都是不同的session

为什么SessionFactroy是线程安全的?

    因为它在项目启动的时候加载一次,且没有公用的变量,不会出现多并发问题。

发布了91 篇原创文章 · 获赞 1 · 访问量 3234

猜你喜欢

转载自blog.csdn.net/duan196_118/article/details/104121617