首页 > 其他分享 >对象关系映射---ORM

对象关系映射---ORM

时间:2024-07-30 20:26:36浏览次数:13  
标签:映射 框架 对象 数据库 --- ORM SQL

一、什么是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数据库移植性好

标签:映射,框架,对象,数据库,---,ORM,SQL
From: https://blog.csdn.net/weixin_65978343/article/details/140805428

相关文章

  • java牛马之路22-Listener监听器
    监听器概念监听器用于监听web应用中某些对象信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等。创......
  • Android开发 - List类中的CopyOnWriteArrayList实现类解析
    CopyOnWriteArrayList是什么CopyOnWriteArrayList是Java并发包(java.util.concurrent)中的一个并发安全的List实现类。它具有特定的设计,使得在并发场景下,读操作(如迭代)可以并发进行,而写操作(如添加、修改、删除)会进行一定的同步,但不会阻塞读操作主要特点和用法:线程安全......
  • SP8099 TABLE - Crash´s number table 题解
    题目传送门前置知识一般的积性函数|数论分块|莫比乌斯反演解法令\(n\lem\)。考虑莫比乌斯反演,推式子,有\(\begin{aligned}&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\operatorname{lcm}(i,j)\\&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\frac{ij}{\gcd(i,j)......
  • 《NET CLR via C#》---第三章("运行时"解析类型引用)
    "运行时"解析类型引用首先在"C:\Users\LH89\source\repos"目录下,新建Console1工程(C#控制台)实现简单的代码,并编译为程序集(假定名为Program.exe)usingSystem;publicclassProgram{staticvoidMain(string[]args){Console.WriteLine("HelloWorld"......
  • (10-2-01)智能行为决策算法:常用的智能行为决策算法-------马尔可夫决策过程(MDP)
    10.2 常用的智能行为决策算法在实际应用中,智能行为决策算法在自动驾驶系统中各有其独特的优势和应用场景,通过合理组合和优化,能够有效提升自动驾驶的安全性、可靠性和效率。在本节的内容中,将详细讲解常用的智能行为决策算法的用法。10.2.1 马尔可夫决策过程(MDP)马尔可夫......
  • 嵌入式初学-C语言-练习二
    #针对于前六篇学习所出习题,题型内容均为本人敲写,若有不合理,或逻辑重复,请多多包涵,也请大家指点!!#1、通过键盘输入一个年份,判断是不是润年,是显示“是润年”,否则显示“不是润年”#include<stdio.h>intmain(){unsignedintyears;printf("输入一个年份\n");scanf("%d......
  • 数据集相关类代码回顾理解 | np.mean\transforms.Normalize\transforms.Compose\xx
    数据集相关类代码回顾理解|StratifiedShuffleSplit\transforms.ToTensor\Counter目录np.meantransforms.Normalizetransforms.Composexxx.transformnp.meanmeanRGB=[np.mean(x.numpy(),axis=(1,2))forx,_intrain_ds]计算每个样本的(RGB)均值  。NumPy库np.......
  • DC-9
    DC-9信息搜集探测局域网内存活主机nmap-sP192.168.19.128/24发现主机192.168.19.138,扫描开放端口nmap-p-192.168.19.138发现只有80端口开放.访问发现是一个员工信息管理系统.渗透用whatweb扫描查看网站信息,发现啥也没有.发现在search页面中存在搜索框可以查询员......
  • springboot+vue基于微服务架构的设备管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与信息化程度的日益加深,设备管理成为企业运营中不可或缺的一环。传统集中式架构的设备管理系统在面对大规模数据处理、高并发访问及系统扩展性等方面显得力不从心。微服务架构以其高度的模块化、灵活的服务部署......
  • mybatis中映射和注解在数据库进行增删改查的方法
    此两种方法都是基于maven项目的基础上运行主要步骤如下:1、在mevan中的pom文件添加依赖文件: 2、在src目录下编写编写配置文件(mybatis-cfg.xml) 3、编写实体类(Student.java) 4、编写映射文件(StudentMapper.xml) 5、编写测试文件 6、调用JUnit5进行调试核心文件含义:......