原理总结-hibernate

来源:互联网 发布:善领dsa2016最新数据 编辑:程序博客网 时间:2024/05/17 23:03

使命

为了简化持久层操作,封装了数据库操作,提供完整的面向对象操作

描述

提供的面向对象的方式实现数据持久化,封装了底层的数据库操作
封装了sql和JDBC

缺点:

不灵活,进行了完全的封装
当程序大量查询统计,或批量更新无法使用数据库特性机制,例如存储过程等

处理流程

  1. 业务逻辑生成临时的对象,传递给hibernate
  2. 临时的对象改变状态为持久化对象
  3. Hibernate通过自己的链接配置和关系映射配置,执行对应的持久化操作
  4. 最终数据被持久化到数据库

概念

  1. 会话(Session)
    hibernate中的session是对象与数据库会话持久化管理器。会话是单线程、声明短暂的对象,代表应用和持久化层之间的一次对话,封装了JDBC连接,事务。
  2. 会话工厂(SessionFactory)
    会话工厂是对属于单一数据库映射文件的缓存快照。它是线程安全的、不可变的,是会话的工厂类。持有一个可选的(二级)数据库缓存,在进程级别或集群级别可以保存在事务中可以重用的数据。
  3. 临时对象(TransientObjects)和集合(Collection)
    没有从属于一个session的持久化类的实例。
  4. 持久化对象(PersistentObjects)和集合(Collection)
    持久化对象是生命周期短暂的单线程对象,包含了持久化状态,从属于唯一session。
  5. 事务(Transaction)
    单线程,应用程序用它表示一批不可分割操作。一个session可以跨越多个事务。
  6. 连接提供者(ConnectionProvider)
    JDBC连接工厂和池,从底层的Datasource或者DriverManager抽象而来。对应用程序不可见,可以被开发扩展或实现。
  7. 事务工厂(TransationFactory)
    事务实例的工厂,对应用程序不可见,可以被开发者扩展或实现。

hibernate对象的三状态

  1. 临时状态-新建或删除
  2. 持久化状态-关联到session的对象,被session管理
  3. 脱管状态-session关闭或清理时,对象变为脱管状态

查询操作

  1. get 先session/二级缓存/数据库,拿到持久化状态
  2. load 先session缓存/创建一个代理对象,等到这个对象真正被调用的时候,去二级缓存/数据库获取持久化状态,即延迟加载
  3. 支持分页操作
  4. Query接口:list/iterator
    list 完整对象的列表;iterator 只有主键的列表,在访问具体节点的时候,加载完整状态

删除/更新操作

  1. 先load,后执行
  2. 手动new一个对象,设置主键进行和修改状态,执行

映射关系

对象的映射关系-通过配置文件配置

  1. 一对一
  2. 一对多
  3. 多对多

缓存级别

  1. session缓存/一级缓存
  2. 二级缓存/查询缓存 
  3. 数据库

查询分为对主键ID的查询(其他缓存)和普通属性的查询(查询缓存)

原创粉丝点击