`
暗黑小菠萝
  • 浏览: 46017 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Hibernate原理

阅读更多
昨天对Hibernate进行了简单的介绍,今天来详细了解一下Hibernate
一、Hibernate原理

图中已经明确表名了Hibernate的工作原理:
①通过Configuration获取Hibernate.cfg.xml中的配置
②根据配置生成SessionFactory会话工厂接口
③根据会话工厂开启session会话
④使用session对持久类进行操作的同时需要开启事务transaction
⑤操作结束后需要提交事务并关闭session会话

1.Configuration
在Hibernate4.3中Configuration加载配置文件的设置并放到注册对象中
Configuration config = new Configuration().configure();
ServiceRegistry service = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();

注:不同版本写法不一样

2.SessionFactory
通过config创建会话工厂对象
sessionFactory = config.buildSessionFactory(service);


3.Session
如何获取session对象,有两种方式:
①sessionFactory.openSession()
②sessionFactory.getCurrentSession()
  使用getCurrentSession()方式需要在Hibernate.cfg.xml进行相应的配置
本地事务<property name="hibernate.current_session_context_class">thread</property>
全局事务<property name="hibernate.current_session_context_class">jta</property>

openSession()和getCurrentSession()有什么区别呢?
openSession()需要手动关闭session对象
getCurrentSession()可以不主动关闭,在事务进行提交/回滚之后能够自动关闭

openSession()每次都是创建新的session对象
getCurrentSession()使用线程队列中现有的session对象,类似单例模式

4Transaction
Transaction tx = session.beginTransaction();  
……  
tx.commit(); 

hibernate对数据库的操作均封装在事务当中,默认是非自动提交的
session保存对象时候,若不开启事务,并且手动提交,对象是不会保存到数据库中的。
  • 大小: 52.2 KB
4
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics