Hibernate原理
2015-11-10 16:21
309 查看
昨天对Hibernate进行了简单的介绍,今天来详细了解一下Hibernate
[size=x-large]一、Hibernate原理[/size]
图中已经明确表名了Hibernate的工作原理:
①通过Configuration获取Hibernate.cfg.xml中的配置
②根据配置生成SessionFactory会话工厂接口
③根据会话工厂开启session会话
④使用session对持久类进行操作的同时需要开启事务transaction
⑤操作结束后需要提交事务并关闭session会话
1.Configuration
在Hibernate4.3中Configuration加载配置文件的设置并放到注册对象中
[color=red]注:不同版本写法不一样[/color]
2.SessionFactory
通过config创建会话工厂对象
3.Session
如何获取session对象,有两种方式:
①sessionFactory.openSession()
②sessionFactory.getCurrentSession()
[color=red] 使用getCurrentSession()方式需要在Hibernate.cfg.xml进行相应的配置[/color]
本地事务<property name="hibernate.current_session_context_class">thread</property>
全局事务<property name="hibernate.current_session_context_class">jta</property>
[color=red]openSession()和getCurrentSession()有什么区别呢?[/color]
openSession()需要手动关闭session对象
getCurrentSession()可以不主动关闭,在事务进行提交/回滚之后能够自动关闭
openSession()每次都是创建新的session对象
getCurrentSession()使用线程队列中现有的session对象,类似单例模式
4Transaction
hibernate对数据库的操作均封装在事务当中,默认是非自动提交的
session保存对象时候,若不开启事务,并且手动提交,对象是不会保存到数据库中的。
[size=x-large]一、Hibernate原理[/size]
图中已经明确表名了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();
[color=red]注:不同版本写法不一样[/color]
2.SessionFactory
通过config创建会话工厂对象
sessionFactory = config.buildSessionFactory(service);
3.Session
如何获取session对象,有两种方式:
①sessionFactory.openSession()
②sessionFactory.getCurrentSession()
[color=red] 使用getCurrentSession()方式需要在Hibernate.cfg.xml进行相应的配置[/color]
本地事务<property name="hibernate.current_session_context_class">thread</property>
全局事务<property name="hibernate.current_session_context_class">jta</property>
[color=red]openSession()和getCurrentSession()有什么区别呢?[/color]
openSession()需要手动关闭session对象
getCurrentSession()可以不主动关闭,在事务进行提交/回滚之后能够自动关闭
openSession()每次都是创建新的session对象
getCurrentSession()使用线程队列中现有的session对象,类似单例模式
4Transaction
Transaction tx = session.beginTransaction();
……
tx.commit();
hibernate对数据库的操作均封装在事务当中,默认是非自动提交的
session保存对象时候,若不开启事务,并且手动提交,对象是不会保存到数据库中的。
相关文章推荐
- 项目总结SpringMVC+hibernate框架 原理(MVC) 模块配置文件(4)
- spring原理 struts2原理 hibernate原理 MyBatis原理 SpringMVC
- JAVA Hibernate工作原理及为什么要用
- Hibernate工作原理及为什么要用?
- ThreadLocal的实现原理,及使用实例,解决spring,hibernate非web项目下的懒加载 no session or session was closed(2)!
- Hibernate应用笔记 ORM实现原理和实例
- Hibernate工作原理及为什么要用?
- Hibernate 原理 快速入门 详解 经典总结
- Hibernate数据保存操作方法的原理对比
- Hibernate工作原理及为什么要用?
- Hibernate系列-Hibernate原理
- hibernate懒加载的原理和作用
- 使用java反射机制来模拟hibernate session的实现原理
- Hibernate 学习之[hibernate的原理][转自http://www.sin-oil.com/oil/article.asp?id=182 作者:daxing22 ]
- hibernate多对一关联关系的映射与原理分析
- Hibernate联合主键映射规则和数据查询原理
- Hibernate4实战 之第六部分:基本实现原理
- Hibernate分页查询原理解读
- 图解Struts,Hibernate工作原理
- Hibernate 的原理与配置快速入门