hibernate的执行流程

引言


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


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


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


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


现的非常明显。


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


   加载流程:


[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. @Test  
  2.     public void testQueryPerson() {  
  3.         Configuration configuration = new Configuration();  
  4.         configuration.configure();// 记载配置文件  
  5.         SessionFactory sessionFactory = configuration.buildSessionFactory();  
  6.         Session session = sessionFactory.openSession();// 创建了一个数据库连接  
  7.   
  8.         // Person 是对应持久化的类的名称  
  9.         List<Person> persons = session.createQuery("from Person").list();  
  10.   
  11.         for (Person person : persons) {  
  12.             System.out.println(person.getName());  
  13.         }  
  14.         session.close();  
  15.     }  
      

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


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

 

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <mapping  resource="com/itheima11/hibernate/utils/Person.hbm.xml" />  

    

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


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


[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1.      @Test  
  2. ublic void testSave() {  
  3. Configuration configuration = new Configuration();  
  4. configuration.configure();  
  5. SessionFactory sessionFactory = configuration.buildSessionFactory();  
  6. Session session = sessionFactory.openSession();  
  7. Transaction transaction = session.beginTransaction();  
  8. Person person = new Person();  
  9. person.setName("王二麻子");  
  10. person.setSex("纯爷们");  
  11. session.save(person);  
  12. transaction.commit();  
  13. session.close();  


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


         


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


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



   

  

    临时状态和脱管状态:


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


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


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



    



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


  



   持久化状态的对象


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


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


   脱管状态的对象


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



   小结


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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值