详解hibernate4基本实现原理

  

  

1:通过配置来读cfg.xml文件

  

2:得到SessionFactory工厂

  

3:通过SessionFactory工厂来创建会话实例

  

4:通过会话打开事务

  

5:通过会话的api操作数据库

  

6:事务提交

  

7:关闭连接

  

说明:以下分方法描述的实现流程并不是Hibernate的完整实现流程,也不是Hibernate的完整实现顺序,只是描述了Hibernate实现这些方法的主干和基本方式,主要是用来理解这些方法背后都发生了些什么,如果需要详细完整的实现流程,请查阅Hibernate相应文档和源代码

  

详解hibernate4基本实现原理”> <br/>
  </p>
  <p>当我们调用了session.save (UserModel)后:</p>
  <p> 1:——→博:Hibernate先在缓存中查找,如果发现在内部缓存中已经存在相同id的阿宝,就认为这个数据已经保存了,抛出例外。</p>
  <p>如果缓存中没有,Hibernate会把传入的这个来对象放到会话控制的实例池去,也就是把一个瞬时对象变成了一个持久化对象。</p>
  <p>如果需要Hibernate生成主键值,Hibernate就会去生成id并设置到PO上</p>
  <p> 2:客户端提交事务或者刷新内存</p>
  <p> 3:根据模型类型和cfg.xml中映射文件的注册来找到相应的hbm.xml文件</p>
  <p> 4:根据hbm.xml文件和模型来动态的拼sql,如下:</p>
  <p>插入表名(来自hbm.xml)(字段名列表(来自hbm。xml))值(对应的值的列表(根据hbm.xml从传入的模型中获取值))</p>
  <p> 5:真正用JDBC执行sql,把值添加到数据库</p>
  <p> 6:返回这个PO的id。</p>
  <p> <br/>
  <br/>
  <img src=   更新表名(来自hbm.xml)字段名(来自hbm。xml)=值(根据hbm.xml从传入的模型中获取值)的条件      

6:真正用JDBC执行sql,把值修改到数据库

  


  
  详解hibernate4基本实现原理”> <br/>
  </p>
  <p> Id的生成方式为分配的情况</p>
  <p>当我们调用了session.delete (UserModel)后:</p>
  <p> 1:根据模型的主键在数据库里面查找数据,来保证对象的存在,然后把找到的对象放到内存里面,如果此时在hibernate的实例池中已经存在对应的实体对象(注意:代理对象不算实体对象),就抛出例外。</p>
  <p> 2:如果此时在hibernate的实例池中不存在对应的实体对象,那么就把对象放到内存里面,但会标识成待删除的对象,就不可以被负载等使用了。</p>
  <p> 3:如果对象还是不存在,那么就直接返回了(注意,这个时候是不抛出例外的)。也就是说,删除之前会执行一个查询语句。</p>
  <p> 4:客户端提交事务或者刷新内存</p>
  <p> 5:判断待删除的阿宝是否存在,存在才需要删除,否则不需要删除<h2 class=详解hibernate4基本实现原理