使命
为了简化持久层操作,封装了数据库操作,提供完整的面向对象操作
描述
提供的面向对象的方式实现数据持久化,封装了底层的数据库操作
封装了sql和JDBC
缺点:
不灵活,进行了完全的封装
当程序大量查询统计,或批量更新无法使用数据库特性机制,例如存储过程等
处理流程
- 业务逻辑生成临时的对象,传递给hibernate
- 临时的对象改变状态为持久化对象
- Hibernate通过自己的链接配置和关系映射配置,执行对应的持久化操作
- 最终数据被持久化到数据库
概念
- 会话(Session)
hibernate中的session是对象与数据库会话持久化管理器。会话是单线程、声明短暂的对象,代表应用和持久化层之间的一次对话,封装了JDBC连接,事务。 - 会话工厂(SessionFactory)
会话工厂是对属于单一数据库映射文件的缓存快照。它是线程安全的、不可变的,是会话的工厂类。持有一个可选的(二级)数据库缓存,在进程级别或集群级别可以保存在事务中可以重用的数据。 - 临时对象(TransientObjects)和集合(Collection)
没有从属于一个session的持久化类的实例。 - 持久化对象(PersistentObjects)和集合(Collection)
持久化对象是生命周期短暂的单线程对象,包含了持久化状态,从属于唯一session。 - 事务(Transaction)
单线程,应用程序用它表示一批不可分割操作。一个session可以跨越多个事务。 - 连接提供者(ConnectionProvider)
JDBC连接工厂和池,从底层的Datasource或者DriverManager抽象而来。对应用程序不可见,可以被开发扩展或实现。 - 事务工厂(TransationFactory)
事务实例的工厂,对应用程序不可见,可以被开发者扩展或实现。
hibernate对象的三状态
- 临时状态-新建或删除
- 持久化状态-关联到session的对象,被session管理
- 脱管状态-session关闭或清理时,对象变为脱管状态
查询操作
- get 先session/二级缓存/数据库,拿到持久化状态
- load 先session缓存/创建一个代理对象,等到这个对象真正被调用的时候,去二级缓存/数据库获取持久化状态,即延迟加载
- 支持分页操作
- Query接口:list/iterator
list 完整对象的列表;iterator 只有主键的列表,在访问具体节点的时候,加载完整状态
删除/更新操作
- 先load,后执行
- 手动new一个对象,设置主键进行和修改状态,执行
映射关系
对象的映射关系-通过配置文件配置
- 一对一
- 一对多
- 多对多
缓存级别
- session缓存/一级缓存
- 二级缓存/查询缓存
- 数据库
查询分为对主键ID的查询(其他缓存)和普通属性的查询(查询缓存)