1.ORM介绍
1.1 什么是ORM,为什么要用ORM框架?
ORM的全称是Object/Relation Mapping,对象/关系数据库映射。ORM可以理解成一种规范,它概述了这类框架的基本特征:完成面向对象编程语言和关系型数据库的映射。当ORM框架完成映射后,它既可利用面向对象程序设计语言的简单易用性,又可以利用关系型数据库的技术优势。因此,我们可以把ORM框架当成是应用程序和数据库的桥梁。
当我们使用一种面向对象程序设计语言来进行应用开发时,从项目开始起就采用的是面对对象分析、面向对象设计、面向对象编程,但到了持久层数据库访问时,又必须重返关系型数库的访问方式,这是一种糟糕的感觉。于是我们需要一种工具,它可以把关系型数据库包装成一个面向对象的模型,这个工具就是ORM框架。
ORM优势:
1 | 一个API来对持久化类的对象执行基本的CRUD操作。 |
2 | 语言或API来指定引用的类和类的属性查询。 |
3 | 一个可配置的设备,用于指定映射元数据。 |
4 | 技术与事务对象交互,以执行脏数据检查,懒关联加载,以及其他优化功能。 |
1.2 ORM映射机制
ORM工具提供了持久化类和数据表之间的映射关系 ,通过这种关系的映射过渡,我们可以很方便地通过持久化类对数据表进行操作。实际上,所有ORM工具大致上都遵循相同的映射思路。
ORM基本映射有如下这几条映射关系:
(1) 数据表映射类:
持久化类被映射到一个数据表。当我们使用这个持久化类来创建实例、修改属性、删除实例时,系统自动会转换为对这个表进行CRUD操作,下图显示了这种映射关系。
(2) 数据表的行映射对象(即实例):
持久化类会生成很多的实例,每个实例就对应数据表中的一行记录。当我们在应用中修改持久化类的某个实例时,ORM工具将会转换成对对应数据表中的特定行的操作。每个持久化对象对应数据表的一行记录。如下图所示:
(3) 数据表的列(字段)映射对象的属性:
当我们在应用中修改某个持久化对象的制定属性时(持久化数据映射到数据行),ORM将会转换成对对应表中指定数据行、指定列的操作。数据表列被映射到对象属性的示意图如下表示:
基于这些基本的映射方式,ORM工具可完成对对象模型和关系模型之间的相互映射,由此可见
在ORM框架中,对象持久化是一种中间媒介,应用程序只需要操作持久化对象,ORM框架则负责将这种操作转换为底层数据库操作——这种转换对开发者来说透明,无需开发者关心,从而将开发者从关系模型中解放出来,使得开发者能够以面向对象的思维操作关系型数据库。
1.3 ORM框架有哪些?
目前流行的ORM框架有如下这些产品:
(1)Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。整个HIbernate项目也一并投入了Jboss的怀抱,而JBoss又加入了RedHat组织,所以现在Hibernate属于RedHat 的一部分。Hibernate 灵巧的设计、优秀的性能,还有其丰富的文档都是其风靡全球的重要因素。
(2)iBatis: Apache软件基金组织的子项目。与其称它为一种ORM框架,不如称它为一中“SQL Mapping”框架。曾经在J2EE的开发中扮演非常重要的角色,但因为不支持存粹的面向对象操作,因此现在逐渐地被取代。但是在一些公司,依然占有一席之地,特别是一些对数据访问特别灵活的地方,iBatis更加的灵活,它允许开发人员直接编写SQL语句。
(3)TopLink:Oracle公司的产品,作为一个遵循OTN协议的商业产品,TopLink 在开发过程中可以自由地下载和使用,但是一旦作为商业产品被使用,则需要收取费用。由于这一点,TopLink 的市场占有率不高。
(4)OBJ:Apache软件基金组织的子项目。另一个开源的ORM框架,可以说是Apache作为iBatis之后的取代产品,也是非常优秀的O/R Mapping框架,但是由于Hibernate 的广芒太盛,所以并未有广泛的使用,而且由于OJB的开发文档不是很多,这也影响了OJB的流行。
1.4 jdbc vs Hibernate vs myBatis ?
2. hibernate介绍
Hibernate不仅仅管理了Java类到数据库表的映射(包括Java 数据类型到SQL数据类型的映射),还提供查询数据和获取数据的方法,可以大幅度地减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate支持几乎所有主要的RDBMS。
HIbernate能够从众多的ORM框架中脱颖而出,因为Hibernate和其他的框架对比有以下的优势:
(1)开源免费的License,方便需要时研究源代码,改写源代码,进行功能定制
(2)轻量级封装,避免引入过多复杂的问题,调试容易,减轻程序员的负担。
(3)具有可扩展性,API开放。功能不够用时,自己进行编码扩展。
(4)开发者活跃,有稳定的发展保障
下面是Hibernate应用程序体系结构的一个非常高的水平视图。
下面是Hibernate的应用架构与一些重要的核心课程的详细视图。
Hibernate使用各种现有的Java API,如JDBC,Java事务API(JTA)和Java命名和目录接口(JNDI)。 JDBC提供了常见的关系数据库功能的抽象的一个基本水平,使具有JDBC驱动程序,Hibernate的支持几乎任何数据库。 JNDI和JTA允许Hibernate与J2EE应用服务器进行集成。
Configuration 对象:
在任何Hibernate应用程序中创建并通常在应用程序初始化创建一次,它代表了Hibernate所需的配置或属性文件。
Configuration对象提供了两个按键组成部分:
1.数据库连接:这是通过Hibernate支持的一个或多个配置文件来处理。这些文件是:hibernate.properties和hibernate.cfg.xml。
2.类映射设置 :此组件创建Java类和数据库表之间的连接
SessionFactory 对象:
Configuration对象用于创建一个SessionFactory对象,它反过来可以配置Hibernate的使用提供的配置文件的应用程序,并允许一个Session对象被实例化。通过SessionFactory是线程安全的对象和使用的应用程序的所有线程。
通过SessionFactory是重量级的对象,因此通常它被应用程序时创建的启动和保持以备后用。将使用一个单独的配置文件需要每个数据库都有一个SessionFactory对象。所以,如果正在使用多个数据库,那么就需要创建多个SessionFactory的对象。
Session 对象:
Session对象用于获取与数据库的物理连接。 Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对象被保存,并通过一个Session对象中检索。会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,应该被创建并根据需要销毁他们。
Transaction 对象:
事务代表一个工作单元与数据库和大部分RDBMS支持事务功能。在Hibernate事务是由一个基本的事务管理器和事务(从JDBC或JTA)来处理。
这是一个可选的对象和Hibernate应用程序可以选择不使用这个接口,而不是在他们自己的应用程序代码管理事务。
Query 对象:
查询对象使用SQL或Hibernate查询语言(HQL)字符串从数据库中检索数据并创建对象。一个查询实例是用来绑定查询参数,限制查询返回的结果数量,并最终执行查询。
Criteria 对象:
Criteria对象用于创建和执行面向对象的条件查询来检索对象。
缓存对Hibernate很重要,它采用了多级缓存方案下文所述:
第一级缓存:
第一级缓存是Session的缓存,是一个强制性的缓存,通过它所有的请求都必须通过。 Session对象不断自身的动力的对象,提交到数据库之前。
如果发出多个更新一个对象,Hibernate试图拖延尽可能长的时间做了更新,以减少发出的更新SQL语句的数量。如果您关闭会话,所有被缓存的对象都将丢失,要么持久,或在数据库中更新。
二级缓存:
二级缓存是可选的缓存和一级缓存,总是会征询任何试图找到一个对象的二级缓存之前。第二级缓存可以在每个类和每个集合基础上进行配置,主要负责在会话缓存的对象。
任何第三方缓存可以使用Hibernate。org.hibernate.cache.CacheProvider接口提供,必须实施提供Hibernate一个句柄缓存实现。
参考博客:二级缓存配置
相关推荐
Hibernate体系结构包括: 1. 最小的体系结构方案,要求应用程序提供自己的JDBC连接并管理自己的事务。这种方案使用了Hibernate API的最小子集。 2. “全面解决”的体系结构方案将应用层从底层的JDBC/JTA API中抽象...
#### 第2章:体系结构(Architecture) - **2.1 概况(Overview)** - 概览Hibernate的整体架构,包括核心组件及其交互方式。 - **2.2 实例状态** - 详细解释Hibernate中的实例状态管理机制,如瞬态、持久化、分离等...
#### 二、体系结构 ##### 2.1 概况(Overview) Hibernate 的架构设计主要围绕几个核心组件: - **Session**: 提供了应用与数据库交互的主要接口。 - **SessionFactory**: 负责创建 Session 并管理其生命周期。 - **...
### Java学习笔记——Java与Hibernate入门精要 #### 一、Java学习笔记概述 ...对于初学者来说,这是一个很好的起点,可以帮助他们快速构建起Java和Hibernate的知识体系,为进一步学习更高级的主题打下坚实的基础。
### Java高级面试框架知识点整理 #### Struts框架详解 **1. Struts框架的基本结构** - **MVC模式实现:** Struts是一个基于MVC(Model-View-Controller)模式的Web应用框架,其中Controller部分主要由一个Servlet...
- **实例状态和上下文相关的Session**:Hibernate的体系结构中,Session是持久化操作的中心,管理着对象的状态和持久化存储。 #### 3. 配置 - **可编程的配置方式和SessionFactory**:Hibernate支持通过编程方式...
计算机基础包括计算机体系结构、内存管理、网络协议等。 14. **C++**: - C++是面向对象的编程语言,与Java有诸多相似之处,但也包含指针、模板等特有概念。 15. **Weblogic及其他**: - Weblogic是Oracle提供的...
5. **项目体系结构图**:在面试中,面试者可能被要求绘制或描述一个项目的架构,这涉及到系统模块划分、技术选型、层次结构、接口设计等多个方面。例如,一个典型的Java企业级应用可能包含前端展示层、业务逻辑层、...
首先,我们需要了解JDBC的体系结构。JDBC由一系列接口和类组成,这些接口和类定义了与数据库进行通信的标准方法。主要组件包括: 1. **DriverManager**:这是JDBC的核心,负责管理数据库驱动程序。通过`...
##### javaException体系结构 - 异常分为**检查异常**(编译器强制处理)和**运行时异常**(编译器不强制处理)。 ##### session和cookie的区别 - **Cookie**:客户端保存的数据。 - **Session**:服务器端保存的...
Java基础部分包括语法、数据类型、控制结构、类与对象、继承、多态、接口、异常处理等内容。深入理解这些概念是成为一名合格的Java开发者的基础。特别是面向对象的设计原则,如封装、继承和多态,是Java的核心特性,...
10. **Oracle数据库管理**:讲解了Oracle的体系结构和系统管理,为数据库的管理和维护提供基础知识。 整个教程旨在建立坚实的语言基础,培养良好的编程习惯,并为后续深入学习Java企业级开发,如Spring和Hibernate...
1. **Java语法基础**:包括变量、数据类型、运算符、控制结构(如if-else、switch、循环)、方法、类与对象、封装、继承、多态等核心概念。 2. **面向对象编程**:深入理解面向对象的设计原则,如单一职责、开闭...
在Java技术体系中,开发CRM系统是一项常见的任务,因为它允许开发者利用Java的强大功能来构建高效、可扩展且易于维护的CRM应用。 本资源"CRM+JAVA+客户关系管理源码整理"提供了一套基于Java的CRM系统源代码,对于...
SSH,即Struts、Spring和Hibernate,是Java Web开发中常用的三大开源框架,它们各自承担着不同的职责,共同构建了一个高效、松耦合的应用体系。本资源提供了这三大框架的基础核心Jar文件,使得开发者能够更方便地...
以下是对"Java面试题(自己整理)"中可能涉及的知识点的详细阐述: 1. **Java基础**:面试通常会从基础语法开始,如数据类型、运算符、流程控制语句(if-else,switch,for,while)、类与对象、封装、继承和多态等...
Java Collection Framework:Java集合框架是一个提供用于存储和操作集合的接口和类的体系结构。 应用服务器与Web服务器的区别:应用服务器通常提供完整的运行环境,支持Web应用的执行,而Web服务器主要处理静态内容...