关闭

[置顶] hibernate的执行流程

3626人阅读 评论(27) 收藏 举报
分类:


   引言


   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做基础。


3
0
查看评论

Hibernate基本执行流程

  • Baple
  • Baple
  • 2014-09-12 15:29
  • 6892

hibernate的执行流程

引言    hibernate是一个开源的ORM框架,在很多程度上弥补了jdbc的不足之处,在中小企业中是比较好用的一个框 架,为什么说在中小型企业中比较流行的,因为对于数据量较大或者是表关系比价复杂的场景,hibernate是有很多 ...
  • qq_27298687
  • qq_27298687
  • 2016-10-08 16:02
  • 1854

(第2讲)hibernate的开发流程及运行原理

1、hibernate的开发流程 创建项目——>基本框架示意图——>引入hibernate 开发包——> 开发hibernate (有3中方法)——>开发domain对象和对象关系映射文件——>手动配置hibernate.cfg.xml文件 注意:hiberna...
  • weiyastory
  • weiyastory
  • 2016-10-08 13:50
  • 1362

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

1.实例化Configuration对象   Hibernate在WEB-INF下查找hibernate.cfg.xml配置文件,根据hibernate.cfg.xml配置文件中配置的信息实例化Configuration对象 。如果使用了事件系统的话,在实例化Configurat...
  • JaunLee
  • JaunLee
  • 2007-09-28 16:50
  • 3395

Hibernate执行流程和关系映射

一、Hibernate的执行流程 hibernate作为一个ORM框架,它封装了大量数据库底层的sql语句操作的方法,这样在执行hibernate的过程中理解hibernate的执行流程很有必要。 由上图我们可以很清楚的发现,想要获得一个sessionFactory对象,需要进行很多步骤,需...
  • muzili12a3
  • muzili12a3
  • 2017-03-05 17:51
  • 238

Hibernate的执行过程

Hibernate运行过程: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的读取并解析映射信息 3.通过config.buildSessionFactory();//...
  • csdn_kenneth
  • csdn_kenneth
  • 2017-05-11 20:28
  • 188

Hibernate的执行流程

在Hibernate开发过程中通常会用到5个核心接口,分别为Configuration接口、SessionFactory接口、Session接口、Transaction接口、Query接口。这里先给出Hibernate执行流程的结果图:(1)初始化Hibernate,构建Configuration实...
  • qq_19925065
  • qq_19925065
  • 2016-09-18 16:53
  • 509

hibernate操作数据库的执行步骤

先举个hibernate执行SQL的例子: public boolean addUser(UserDO userDO) { boolean b = false; if (userDO != null) { try { getHibernateTemplate().save(use...
  • dreamrealised
  • dreamrealised
  • 2013-06-21 13:58
  • 2260

hibernate的基本使用步骤

hibernate的基本使用步骤 1.hibernate主要结构     a.hibernate.cfg.xml(仅1个)         hibernate主配置文件,主要定义数据连接参数和...
  • u011637069
  • u011637069
  • 2015-12-21 17:00
  • 3677

hibernate Init()执行步奏与流程

首先:先实例化事物注册对象,会话对象,和事物对象 privcate SessionFactory  sessionFactory; peivate Session session; privare Transaction transaction; 第一步:创建配置对象  &#...
  • y532798113
  • y532798113
  • 2017-03-11 14:03
  • 256
    个人资料
    • 访问:564583次
    • 积分:18488
    • 等级:
    • 排名:第599名
    • 原创:274篇
    • 转载:20篇
    • 译文:0篇
    • 评论:5683条
    和我交谈
    点击这里给我发消息 点击这里给我发消息
    时间你好?
    博客专栏
    最新评论