ORM对象/关系数据库映射
ORM全称Object/Relation Mapping,对象/关系数据库映射,可以理解成一种规范。该框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射。
ORM关系型数据库包装成面向对象的模型。
ORM框架由 实体+XML配置文件(如下图所示)
基本映射方式:有三种
①数据库表映射类:持久化类被映射到一个数据表 ,当使用一个持久类来创建实例,修改实例属性,删除实例时,系统自动回转换对这个表进行CRUD操作。
②数据表的行映射对象(实例):持久化类会生成很多实例,每个实例就对应数据表中的一个特定行的操作。每个持久化对象对应数据表的一行记录。
③数据表中的列映射对象的属性:当在应用中修改某个持久化对象的指定属性时(持久化实例映射到数据行),
ORM将会转换成对对应数据表中指定数据行、指定列的操作。
About hibernate:
hibernate就是一个ORM框架的典型代表。
①hibernate是轻量级JavaEE应用的一个持久层框架。它的作用在于管理Java实体类到数据库表之间的映射关系,并且提供数据查询和获取数据的方法,可以大幅度的缩短使用JDBC处理数据持久化的时间。
②hibernate完成了对象模型和基于SQL关系模型的映射关系,使得程序员可以采用面向对象的方式来开发程序,充当了两者之间的桥梁。
③Hibernate是一个面向JAVA环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去 ,Hibernate的目标主要是为了释放开发者通常的数据持久化相关的编程的繁重任务。
对于以数据为中心的程序而言,往往在数据库中使用存储过程实现商业逻辑,Hibernate可能不是最好的解决方案,但是对于那些基于JAVA的中间件应用,设计采用面向对象的业务逻辑和商业逻辑,Hibernate是最有用的。
④Hibernate不仅仅管理JAVA类到数据库表的映射,还提供数据查询和获取数据的办法,可以大幅度减少开发时人员使用SQL和JDBC处理数据的时间。
对比一些框架的优缺点:
Hibernate 主要特点:
1、 开源和免费的License,方便需要时研究源码,改写源代码,进行功能定制。
2、 轻量级封装,避免引入过多复杂的问题,调试容易,减轻程序员负担。
3、 有可扩展性,API开放,功能不够用时,自己可以编码扩展。
Hibernate的持久化解决方案将用户从原始的JDBC访问中释放出来,用户无须再关注底层的JDBC的操作。而是以面向对象的方式进行持久层操作。底层数据连接的获得,数据访问的实现,事务控制都无须用户关心。将应用从底层的JDBC中抽象出来,通过配置文件管理底层的JDBC连接,让Hibernate解决持久化访问的实现。
简单工作原理:
分析:
1、Hibernate框架需要2种配置文件,分别是:hibernate.cfg.xml(存放数据库连接信息)与xxx.hbm.xml
2、xxx.hbm.xml是配置在hibernate.cfg.xml中,该文件确定了持久类与数据表,数据列之间的对应关系。
3、hibernate不再是直接调用JDBC访问,而是Session会话访问。在hibernate框架中,只有处于Seesion管理下的POJO对象才有持久化操作的能力。
体系架构:
几个关键对象:
SessionFatory:hibernate关键对象,它是单个数据库映射关系经过编译后的内存镜像,线程安全。主要作用是生成Session的工厂,该对象可以为事务之间可重用的数据提供可选的二级缓存。
Session:它是应用程序与持久储存层之间交互操作的一个单线程对象,是hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象的生命周期极短,底层封装了JDBC连接。Session对象持有一个必选的一级缓存,显式执行flush()之前,所有持久化操作的数据都缓存在Session对象处。
持久化对象:系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化状态,这一系列对象都被称为持久化对象。在程序中对持久化对象执行的修改,都将自动被转换为持久层的修改。持久化对象完全可以是普通的JavaBean,唯一特殊的是他们正与一个Session关联。
事务(transaction):具有数据库事务的概念,Hibernate事务是对底层具体的JDBC、JTA、以及CORBA事务的抽象,在某些情况下,一个Transaction之内可能包含多个Session对象。虽然事务操作是可选的,但所有持久化操作都应该在事务管理下进行,即便是只读操作。
连接提供者(ConnctionProvider):生成JDBC连接的工厂,通过抽象将应用程序与底层的DataSource或DriverManager隔离开,该对象无须应用程序直接访问,仅在应用程序需要扩展时使用。注:实际开发中,很少有采用DriverManager来获取数据库连接, 通常都会使用DataSource来获取数据库连接。
事务工厂(TransactionFactory):是生成Transaction对象实例的工厂,该对象无须应用程序直接访问,它负责对底层具体的事务实现进行封装、将底层具体的事务抽象成Hibernate事务。
JAVA对象的三种形态:
瞬时状态,持久化状态与游离状态。
瞬态:对象由new操作符创建,且尚未与Hibernate Session关联的对象,被认为处于瞬态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标示,如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾回收机制销毁。使用Hibernate session可以让其变为持久化状态。
持久化:持久化实例在数据库中有对应的记录,并拥有一个持久化标识(identifier),持久化的实例可以是刚保存的。也可以是刚被加载的。无论那种,持久化对象都必须与指定的Hibernate Session关联。Hibernate会检测到处于持久化状态对象的改动,在当前操作执行完成时将对象数据写回数据库。开发者不需要手动执行UPDATE。
游离:某个实例曾经处于持久化状态,但随着与之关联的session被关闭,该对象就变成游离状态了。游离对象的引用依旧有效,对象可以继续被修改,只是不会同步到数据库中。如果重新让游离对象与某个session关联,该对象会重新转换为持久化状态。
总结: