Hibernate 框架总结

来源:互联网 发布:无线ad hoc网络 编辑:程序博客网 时间:2024/05/21 08:58

hibernate 的概念

  • hibernate 是数据访问的框架,对JDBC进行了封装,是针对数据库访问提出的面向对象的解决方案。

hibernate 的作用

  • 使用hibernate可以直接访问对象,hibernate自动将访问对象转化为sql执行,从而间接达到访问数据库的目的,简化了数据访问层的开发。

hibernate 和JDBC的区别

  • hibernate 是对对象进行操作,JDBC是操作数据库。
  • hibernate使用方言 更改数据库方便 移植性好(采用一致的方法访问数据库)。
  • hibernate自动生成SQL语句 JDBC需要编写大量的SQL语句。
  • JDBC需要给大量的?参数赋值,hibernate自动赋值。

hibernate 与MyBatis的对比

  • 共性:
    • 对JDBC进行了封装。
    • 采用ORM思想解决Entity和数据库的映射问题。
  • Mybatis
    • Mybatis 采用sql与Entity进行映射 ,对JDBC封装度较轻。
    • Mybatis 自己写SQL语句 灵活性高
  • Hibernate
    • hibernate采用数据库与Entity进行映射,对JDBC 封装性较重。
    • hibernate自动生成SQL语句 ,对于基本操作,开发效率高。

Hibernate 设计原理

  • hibernate采用了ORM映射思想对JDBC进行了封装。
  • hibernate框架是ORM思想的一种实现,解决了对象和数据库数据的映射问题。
  • hibernate提供一系列API允许我们直接访问实体对象,然后通过映射关系,转化为SQL并去执行,从而达到访问数据库的目的。

ORM思想

  • ORM是一种设计思想,即对象关系映射(Java对象与数据库之间的映射)。
  • ORM是数据库与对象进行相互转化的思想
  • 一般都是采用配置+反射的方式来实现ORM

Hibernate 配置文件

  • hibernate.cfg.xml
  • 该文件中用来配置数据库链接,hibernate框架参数,以及映射关系文件。

hibernate常用API

  • Configuration
    • 负责加载主配置文件信息,加载映射关系文件信息。
  • SessionFactory
    -负责创建Session对象。
  • Session
    -链接数据库会话,负责进行增删改操作
  • Transaction
    -负责事务的控制
  • Query
    • 负责执行特殊查询

Hibernate使用步骤

  • 导入hibernate包,以及数据库驱动包。
  • 引入hibernate主配置文件 hibernate.cfg.xml。
  • 创建实体类。
  • 创建映射关系文件。
  • 使用hibernate常用API 执行增删改查操作。

hibernate主键生成方式

常用方式 特点 配置语法 sequence 采用序列方式生成主键,适用于Oracle数据库 <generator class="sequence"> <param name="Sequence">序列名</param></generator> identity 采用的实自动增长的机制生成主键,适用于Oracle之外的其他数据库 <generator class="identity"></generator> native 根据当前数据库使用的方言自动选择是sequence或者identity <generator class="native"> <param name="sequence">序列化</param></generator>

Hibernate 一级缓存

什么是一级缓存

  • hibernate创建每个session对象时,都会给session分配一块独立缓存区,用于存放session查询出来的对象,这个给session的缓存区就称为一级缓存,也叫session级缓存。

为什么使用一级缓存

  • session取数据时,会优先向缓存区取数据,如果存在数据则直接取回,不存在才会去查询数据库,从而降低了数据库的访问次数,提高了代码的运行效率。

一级缓存规则

  • 一级缓存是session独享的,每个session不能访问其他session的缓存区。
  • session的save,update,delete操作会触发缓存更新。

一级缓存管理

  • session.evict(obj);将obj从一级缓存中移除。
  • session.clear(); 清除一级缓存中所有的obj;
  • session.close(); 关闭session,释放缓存空间;

二级缓存

  • 二级缓存类似于一级缓存,可以缓存对象。他是sessionFactory级别的缓存,由sessionfactory负责管理,因此二级缓存数据时session之间共享的,不同的session对象都可以共享二级缓存中的数据。
  • 二级缓存应用场景
    • 对象数据之间频繁共享
    • 数据变化频率低

如何使用二级缓存

  • 导入ehcache.xml
  • 在src 下添加缓存配置文件ehcache.xml
  • 在hibernate.cfg.xml中开启二级缓存,制定采用的二级缓存驱动类
  • 再要缓存的对象对应的映射关系文件中,开启当前对象的二级缓存支持,并指定缓存策略
二级缓存策略
类型 特点 隔离级别 只读型(read-only) 缓存不会更新,适用于不会发生变化的数据,效率最高 隔离级别最低 读写型(read-write) 缓存会在数据变化时更新 ,适用于变化型数据 隔离级别中 不严格读写型(nonstrict-read-write) 缓存会不定期更新,适用于变化低的数据 事务型(transactional) 缓存会在数据变化时更新 隔离级别高

对象持久性的三种状态

  • 持久态,临时态,游离态;

三种状态之间的转换

状态 转换条件 特征 临时态 1 通过new创建对象时为临时态 2通过delete方法操作对象转换为临时态 1 临时态的对象可以被垃圾回收 2 临时态的对象未进行持久化,未予session关联 持久态 1通过eg ,load, list ,iterate方法查到的对象为持久态 2 通过save,update方法操作的对象转换为持久态 1 不能被垃圾回收器回收 2 与session关联,对象存在于session中有session负责管理 3 持久化的对象数据可以自动更新到数据库中 游离态 通过session 的evict,clear,close方法操作的对象会转化为游离态 1 游离态的对象会被垃圾回收器回收 2 游离态的对象已经进行过持久化,但已经与session接触了关联

延迟加载

什么是延迟加载

  • 在使用某些hibernate方法查询数据时,hibernate返回的只是一个除id外的空对象,并没有去真正的查询数据库,只有在使用这个对象的时候才会触发数据库查询,并将数据库查询的结果注入到那个空对象中,这种将查询时机推迟到对象访问的机制就是延迟加载。

为什么使用延迟加载

  • 可以提升内存资源的使用率
  • 可以降低数据库的访问次数

采用了延迟加载的方法

  • session.load();
  • query.iterate();
  • 关联映射中关联属性的加载

关联映射

  • 若两张表有关联关系,可以在实体对象和映射关联关系文件中配置这种关系,然后使用hibernate操作其中一张表时,它通过配置关系间接操作另一张表,这种通过配置自动操作另一张表的手段称之为关系映射。

关系映射的作用

  • 当我们操作一张表时 通过关系映射可以自动操作另一张表的数据;
  • 关联查询,新增,修改,删除关系表的数据;

关系映射的类型

  • 一对多关联
  • 多对多关联
  • 多对一关联
  • 一对一关联
  • 继承关联

关系映射的使用

  • 明确两张表的关系及关系字段
  • 在实体类中添加关联属性
  • 在影射关系文件中配置关联关系

级联操作

  • hibernate中通过关系映射时,在对一方进行增删改查时,连带着另一方也会进行怎删改查的操作,这种关联操作称之为级联操作。
  • 要实现级联操作需要在映射关系文件中的关联属性标签中通过cascade属性进行配置,即cascade=“save-update”
原创粉丝点击