对象关系映射---ORM

一、什么是ORM?

ORM(Object Relational Mapping),即对象关系映射,是一种程序设计技术,用于在面向对象编程语言中实现对象和关系型数据库之间的映射。

二、ORM是干什么的?

ORM 的主要目的简化数据库操作,使得开发人员可以以面向对象的方式来处理数据库中的数据,而不必直接编写复杂的 SQL 语句。

三、ORM的优缺点

1.优点

(1)提高开发效率:开发人员可以专注于业务逻辑的实现,而不必花费大量时间在编写和优化 SQL 语句上。

例如,在创建、读取、更新和删除数据时,只需要操作对象,ORM 框架会自动将这些操作转换为相应的 SQL 语句。

(2)减少代码重复:ORM 框架通常提供了一套统一的接口和方法,使得在不同的项目中处理数据库操作的方式保持一致。

比如,无论使用哪种数据库,都可以使用类似的方法来进行数据的插入和查询。

(3)增强代码的可维护性:对象模型更贴近业务领域,使得代码更易于理解和维护。

当业务逻辑发生变化时,只需要修改对象的属性和方法,而不必修改底层的 SQL 语句。

2.缺点

(1)性能问题:在某些复杂的查询场景下,ORM 生成的 SQL 可能不如手动编写的高效。

例如,对于涉及大量关联和复杂条件的查询,可能需要手动优化 SQL 来提高性能。

(2)灵活性受限:某些特定的数据库特性或复杂的数据库操作可能难以通过 ORM 框架直接实现。

四、为什么要有ORM模型?

之所以要有 ORM 模型,主要基于以下几个重要原因:

1.提高开发效率

        开发人员无需花费大量时间和精力去编写复杂的 SQL 语句,专注于业务逻辑的实现。

        比如,在开发一个电商系统时,处理订单和商品的关联,使用 ORM 可以直接操作对象,而不用去考虑复杂的多表连接和数据查询语句。

2.降低数据库操作的复杂性

       关系型数据库的操作涉及诸多细节,如数据类型转换、索引优化等,ORM 框架进行了封装和处理。

        例如,不同数据库对于日期类型的处理可能略有不同,ORM 会在后台自动处理这些差异。

3.增强代码的可维护性和可读性

        以面向对象的方式处理数据,代码更贴近业务概念,易于理解和维护。

        假设要修改用户信息的逻辑,通过对象的方法和属性进行操作,代码结构更清晰,易于定位和修改。

4.跨数据库平台的兼容性

        当需要切换数据库时,只需修改少量的配置,而无需大量修改业务代码。

        比如,从 MySQL 迁移到 PostgreSQL,ORM 框架能够自动适配不同数据库的特性和语法差异。

5.减少代码错误

        ORM 框架通常会进行一些输入验证和错误处理,降低因手动编写 SQL 导致的错误。

        例如,防止 SQL 注入攻击,确保数据的安全性。

6.便于团队协作

        统一的对象操作方式,使得团队成员之间更容易理解和交流代码。

        在一个多人开发的项目中,大家都遵循相同的 ORM 规范进行数据库操作,减少了沟通成本和代码冲突的可能性。

综上所述,ORM 模型的出现极大地改善了软件开发过程中与数据库交互的效率、质量和可维护性。

五、ORM映射哪些内容?(重要)

ORM 要映射的内容主要包括以下几个方面:

1.类和表的映射

         在 Java 中定义的类会对应到关系型数据库中的表。例如,定义一个名为 User 的类,它可能会映射到数据库中的 user 表。

2.字段和属性的映射

        类中的属性会对应到表中的字段。比如,User 类中的 idnameage 等属性,会分别映射到 user 表中的 idnameage 字段。

3.Java 数据类型和数据库中的数据类型

        Java 中的基本数据类型(如 intStringdouble 等)以及引用数据类型(如自定义的类)需要与数据库中的相应数据类型(如 INTVARCHARDOUBLE 等)进行映射。

        例如,Java 中的 int 类型通常会映射到数据库中的 INT 类型,String 类型可能映射到 VARCHAR 或 TEXT 类型。

4.对象关系的映射

        处理对象之间的关联关系,如一对一、一对多、多对多等。

        比如,一个 Order 类与 OrderItem 类可能存在一对多的关系,在数据库中通过外键来实现这种关联,ORM 框架会负责处理这种关系的映射和数据的同步。

5.继承关系的映射

        如果在 Java 中存在类的继承关系,ORM 框架需要确定如何将这种继承关系映射到数据库中。

        常见的策略有单表继承、每个具体类一张表、类层次表等。

6.对象的生命周期管理

        包括对象的创建、读取、更新和删除操作与数据库中的插入、查询、修改和删除操作的映射。

        通过这些映射,ORM 框架使得开发人员能够以面向对象的方式来操作数据库,而无需直接处理底层的 SQL 语句和数据库细节。

六、常见的ORM框架有什么?

        常见的 ORM 框架有 Hibernate(Java 领域)、Entity Framework(.NET 领域)、Django ORM(Python 的 Django 框架)等。

        总之,ORM 是一种在软件开发中非常有用的技术,但在使用时需要根据项目的具体需求和性能要求来权衡其优缺点。

七、ORM 框架是如何实现对象和关系型数据库之间的映射的?

ORM 框架实现对象和关系型数据库之间映射的过程通常包含以下几个关键步骤:

1.对象模型定义

        开发人员使用编程语言定义对象类,这些类的属性对应着数据库表中的列。

        例如,在 Java 中使用类来表示实体,如 class User { private int id; private String name; } ,其中 id 和 name 分别对应数据库中 user 表的列。

2.映射配置

        通过配置文件或注解来指定对象与数据库表、对象属性与表列之间的映射关系。

        以 Hibernate 框架为例,可以使用 @Entity 注解标记实体类,使用 @Column 注解指定属性与列的映射细节。

3.数据持久化

        当创建对象并设置其属性值后,ORM 框架会将对象的状态转换为相应的 SQL 语句来执行数据库操作。

        比如,插入一个新的用户对象时,ORM 框架会生成类似 INSERT INTO user (id, name) VALUES (?,?) 的 SQL 语句,并填充实际的值。

4.数据检索

        执行数据库查询操作时,ORM 框架将查询结果转换为对应的对象。

        例如,查询 user 表获取用户数据,ORM 框架会把每一行数据映射为一个 User 对象,并填充对象的属性值。

5.关系映射

        处理对象之间的关联关系,如一对一、一对多、多对多等。

        例如,一个 Order 对象与多个 OrderItem 对象存在一对多关系,ORM 框架在查询 Order 对象时,会自动关联获取相关的 OrderItem 对象。

7.缓存管理

        为了提高性能,ORM 框架通常会实现一定的缓存机制,减少对数据库的重复查询。

        比如,将经常访问的数据缓存到内存中,下次请求相同数据时直接从缓存中获取。

8.事务处理

        确保数据库操作的原子性、一致性、隔离性和持久性(ACID)。

        例如,在一个业务流程中,涉及多个数据库操作,ORM 框架会将这些操作包装在一个事务中,要么全部成功,要么全部失败回滚。

        总之,ORM 框架通过上述一系列机制,实现了对象和关系型数据库之间的无缝映射,使得开发人员能够更便捷地进行数据库操作,而无需过多关注底层的数据库细节。

一、Mybatis和hibernate 区别(面试)

1. Hibernate是全自动化ORM; Mybatis是半自动化ORM。

2. Hibernate简化dao层,不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上;     Mybatis需要手写SQL语句以及结果映射。

3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降;            Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。

4. Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂, 对多字段的结构进行部分映射困难;

        Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系, 复杂的SQL语句Mybatis效率更高

Mybatis优势: 可以进行更细致的SQL优化;容易掌握

Hibernate优势:dao层开发比mybatis简单,mybatis需要维护SQL和结果映射

                            hibernate数据库移植性好

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值