ORM,即对象关系映射(Object-Relational Mapping),是一种编程技术,用于在关系数据库和对象程序语言之间转换数据。在Java中,ORM框架允许开发者以面向对象的方式处理数据库操作,而不需要直接编写SQL语句。以下是ORM的一些关键点:
-
ORM概念:ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,充当业务逻辑层和数据库层之间的桥梁。
-
ORM由来:在软件开发中,我们通常在用户层面和业务逻辑层面使用面向对象的方法,而数据则保存在关系数据库中。ORM解决了对象信息变化时如何保存到关系数据库的问题。
-
ORM的优势:
- 类型安全:提供了编译时类型安全,减少了运行时的
ClassCastException
。 - 减少代码:避免了编写重复的SQL语句,提高了开发效率。
- 提高代码重用性:同一段代码可以用于多种类型的数据操作。
- 性能提升:避免了运行时的类型检查和转换,提高了程序性能。
- 增强可读性:通过泛型类型参数,开发者可以更清楚地了解方法或类期望的输入和输出类型。
- 类型安全:提供了编译时类型安全,减少了运行时的
-
ORM的劣势:ORM可能会在一定程度上牺牲程序的执行效率,并且过度依赖ORM可能导致开发者的SQL编写能力退化。
-
常见的Java ORM框架:
- Hibernate:是一个全自动的ORM框架,提供了强大的功能,如缓存机制、查询语言(HQL)、批量操作等。
- MyBatis:是一种“半自动”的ORM框架,通过XML或注解将SQL语句和结果集映射到Java对象。
- JPA(Java Persistence API):是Java EE的ORM标准,提供了ORM映射元数据、JPA API和查询语言(JPQL)。
- Spring Data JPA:基于JPA规范的Spring扩展,简化了数据访问层的编码工作。
-
ORM的使用场景:ORM框架在Java应用开发中被广泛使用,尤其是在需要简化数据库操作和提高开发效率的场景中。
通过使用ORM框架,Java开发者可以更加专注于业务逻辑的实现,而不是数据库操作的细节,从而提高开发效率和代码的可维护性。
Mapping
在ORM(对象关系映射)的上下文中,"mapping"(映射)是指将对象的属性与数据库表的列之间建立对应关系的过程。这种映射允许ORM框架将对象的状态转换为数据库操作,反之亦然。以下是一些关于ORM映射的关键概念:
-
实体与表映射:在ORM中,一个实体类通常对应于数据库中的一个表。这个实体类代表了表的结构,包括它的字段和关系。
-
属性与列映射:实体类的属性对应于表中的列。ORM框架需要知道如何将这些属性映射到数据库表的列上。
-
主键映射:每个实体类都有一个主键属性,它对应于数据库表的主键列。ORM框架使用这个主键来唯一标识表中的每条记录。
-
关系映射:实体类之间的关系(如一对多、多对多、一对一)需要映射到数据库的外键关系上。
-
继承映射:在面向对象的编程中,继承是一种常见的概念。ORM框架需要能够处理继承,将继承结构映射到数据库中,这可能涉及到单表继承、联合继承或表继承等策略。
-
复合主键映射:有些表可能使用复合主键(多个列共同作为主键),ORM框架需要能够处理这种情况,将复合主键映射到实体类的属性上。
-
延迟加载与即时加载:在处理关联对象时,ORM框架可以配置为延迟加载(懒加载)或即时加载(急加载)。延迟加载意味着只有在实际需要关联对象时才从数据库加载它们,而即时加载则是在加载主实体时同时加载关联对象。
-
级联操作:在某些情况下,对一个实体的操作(如插入、更新、删除)需要级联到其关联的实体上。ORM框架允许开发者指定这些级联操作。
-
映射文件:在某些ORM框架中,如MyBatis,映射是通过一个单独的XML文件或注解来定义的,而在其他框架如Hibernate中,映射可以是注解或基于约定的。
-
查询映射:ORM框架还允许开发者定义查询映射,即将特定的查询语句映射到方法调用上,这样可以以面向对象的方式执行复杂的数据库查询。
映射是ORM框架的核心功能,它使得开发者能够以面向对象的方式处理数据库操作,而不需要直接编写SQL语句,从而提高了开发效率和代码的可维护性。