hibernate的执行流程

原创 2016年10月07日 17:43:11


   引言


   hibernate是一个开源的ORM框架,在很多程度上弥补了jdbc的不足之处,在中小企业中是比较好用的一个框


架,为什么说在中小型企业中比较流行的,因为对于数据量较大或者是表关系比价复杂的场景,hibernate是有很多


弊端的,因为hibernate的底层也是对jdbc的操作,所以也会生成sql语句,但是在生成sql语句的时候不会考虑性能


方面,而是根据他自己的一个处理方法来自动生成,这其实在性能会影响性能,当数据量大或者表关系复杂的时候表


现的非常明显。


   下面就来简单介绍一个hibernate的加载流程、内部执行流程和状态的改变:


   加载流程:


@Test
	public void testQueryPerson() {
		Configuration configuration = new Configuration();
		configuration.configure();// 记载配置文件
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();// 创建了一个数据库连接

		// Person 是对应持久化的类的名称
		List<Person> persons = session.createQuery("from Person").list();

		for (Person person : persons) {
			System.out.println(person.getName());
		}
		session.close();
	}
      

   上面的代码我们可以用下面的图形化流程来表示,其中需要解释的就是在加载hibernate配置文件


(hibernate.cfg.xml)之前需要将持久化类的映射文件加载到配置文件中。 

 

         <mapping  resource="com/itheima11/hibernate/utils/Person.hbm.xml" />

    

  上面就是我们在利用hibernate执行CRUD操作的时候的一个加载流程,这个流程是比较简单的,下面以插入数据为


例给大家介绍一下hibernate的内部执行流程,部分代码如下:


       @Test
	public void testSave() {
		Configuration configuration = new Configuration();
		configuration.configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		Person person = new Person();
		person.setName("王二麻子");
		person.setSex("纯爷们");
		session.save(person);
		transaction.commit();
		session.close();
	}


下面我们用一个流程图来解析上面代码在hibernate内部的执行过程:


         


   当我们在执行对数据库的CRUD操作的时候大概就会经历上面的几个过程,然后将结果返回。下面我们再来分析


代码和我们操作的对象的状态的改变以及在内存中的位置。



   

  

    临时状态和脱管状态:


      临时状态的对象肯定是从new创建来的


      脱管状态的对象肯定是从持久化状态转化过来的


     通过get方法在DB中获取的对象是持久化状态



    



   分享一张状态转换图(游离状态也为托管状态)


  



   持久化状态的对象


可以通过session.save/update/get方法把一个对象变成持久化对象变成持久化状态的对象只说明该对象进


入了hibernate的区域和数据库没有关系,和数据库有关系的只有事务


   脱管状态的对象


    可以通过session.close/evic/clear方法是对象为托管状态。



   小结


  上面的博文就是在小编初始hibernate的时候对代码执行和内部机制的一些分析,通过分析和比较好的认识


hibernate的内部运转机制,为以后更深入的了解hibernate做基础。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

hibernate的执行流程

引言    hibernate是一个开源的ORM框架,在很多程度上弥补了jdbc的不足之处,在中小企业中是比较好用的一个框 架,为什么说在中小型企业中比较流行的,因...

粗谈Hibernate——从执行顺序来看Hibernate

1.实例化Configuration对象   Hibernate在WEB-INF下查找hibernate.cfg.xml配置文件,根据hibernate.cfg.xml配置文件中配置的信息实例化Con...
  • JaunLee
  • JaunLee
  • 2007年09月28日 16:50
  • 3175

Hibernate基本执行流程

  • Baple
  • Baple
  • 2014年09月12日 15:29
  • 6400

Hibernate运行原理

Hibernate是一个开放源代码的对象关系映射框架,她对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库,hibernate可以应用在任何使用JDBC...

Hibernate 调用函数及过程

一、函数 第一种方式:获得connection Connection conn = session.connection(); CallableStatement call = con...

Struts 2 Spring Hibernate三大框架的执行流程以及原理

转:http://www.cnblogs.com/System-out-println/p/5974113.html Struts2框架 一、简介 Struts2是一个相当强大的Java Web...
  • xjy9266
  • xjy9266
  • 2017年07月19日 14:11
  • 99

Hibernate的执行流程

在hibernate开发的过程中通常会用到5个核心接口,分别为Configuration接口、SessionFaction接口Session接口、Transaction接口和Query接口。通过这些接...

SSH框架之Hibernate的程序执行流程、Set集合映射、Set集合的数据保存

一、Hibernate程序执行流程: 二、Set集合映射 1、开发流程: 需求分析/数据库设计、项目设计/ 编码/测试/实施部署上线/验收 2、需求: 用户购买, 填写地址! 3、数据...

Struts2+hibernate+Ext 流程管理系统

  • 2014年05月14日 11:04
  • 12.62MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate的执行流程
举报原因:
原因补充:

(最多只允许输入30个字)