什么是ORM框架?

前言

晚上好呀

我是你的人类朋友

今天来介绍一下什么是ORM框架。😊

解释

首先,ORM是"Object-Relational Mapping"的缩写,中文可以翻译为"对象关系映射"。

它是一种技术,主要目的是解决面向对象编程与关系型数据库之间存在的不匹配问题。

在编程中,我们经常使用面向对象的方式来处理数据,将数据封装成对象,每个对象都有自己的属性和方法。

而在关系型数据库中(比如经典的MySQL),数据是按照表格的形式存储的,每个表格有行和列,用来表示数据的不同字段。

这就出现了一个问题:如何将面向对象的数据模型映射到关系型数据库中,以便我们可以方便地在程序中进行数据的存储和检索呢?ORM框架就是为了解决这个问题而诞生的。(这句话听不懂没关系,我下面举一个例子)

在面向对象的编程中,我们通常会创建一些类来表示实体,比如一个User类,这个类会有属性(如usernamepassword等)和方法。然而,当我们想要将这些对象持久化到数据库时,就需要考虑如何将这些对象的属性映射到数据库表的列。

ORM框架的作用就是帮助我们实现这种映射。

请看大屏幕⬇️⬇️⬇️

假设我们有一个User类:

java 复制代码
public class User {
    private int id;
    private String username;
    private String password;
    // 构造方法、getter和setter方法省略
}

在关系型数据库中,我们想要为这个User类创建一个对应的表来存储数据:

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

ORM框架会帮助我们将User类中的属性与users表中的列进行映射。具体来说,它可能会这样做:

  1. User类的id属性映射到users表的id列。
  2. User类的username属性映射到users表的username列。
  3. User类的password属性映射到users表的password列。

有了这个映射关系后,当我们想要保存一个User对象到数据库时,ORM框架会自动为我们生成相应的SQL插入语句;同样地,当我们想要从数据库中检索一个User对象时,ORM框架也会为我们生成相应的SQL查询语句,并将查询结果自动填充到User对象的属性中。

不同的ORM框架实现这种映射的方式可能有所不同,但大体上都是类似的。有些框架可能需要我们显式地定义映射关系,而有些框架则可以通过约定来自动推断映射关系。

举个例子,如果你使用的是Hibernate这个ORM框架,你可以使用注解来定义映射关系,如下所示:

java 复制代码
import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "username")
    private String username;

    @Column(name = "password")
    private String password;

    // 构造方法、getter和setter方法省略
}

在这个例子中,@Entity注解表示User类是一个实体类,@Table注解指定了实体类对应的数据库表名。@Id@GeneratedValue注解用来标识主键,而@Column注解则用来指定实体类属性与数据库表列之间的映射关系。

通过这种方式,Hibernate就知道如何将User对象与users表进行映射,从而方便我们在程序中进行数据的存储和检索。

ORM框架就像一个翻译,把面向对象的数据模型翻译成关系型数据库能懂的语言

常见的ORM框架有MyBatis、Hibernate等。这些框架提供了一套完整的机制,让我们可以方便地进行对象与数据库之间的映射操作,而不需要每次都手动编写大量的SQL语句。

最后

就到这边咯

下次见

🚗

相关推荐
艾斯特_26 分钟前
混合检索与重排:提升召回与排序质量
后端·python·ai
Ai拆代码的曹操1 小时前
RocketMQ 消息堆积排查实战:从 20 个消费者线程卡死到 rebalance 死亡螺旋
后端·rocketmq
吃饱了得干活1 小时前
@Transactional 又失效了?把这 8 个坑全填了!
java·后端·spring
颜进强1 小时前
从零搭建私人 RAG 知识库:让项目决策真正“可检索、可追溯”
前端·后端·ai编程
颜进强1 小时前
Embedding 模型介绍:热门模型对比与应用场景
前端·后端·ai编程
颜进强1 小时前
LanceDB 基础使用:用 TypeScript 完成第一次向量检索
前端·后端·ai编程
武子康1 小时前
低延迟不是更快地猜:EOU / Barge-in / Turn Protocol 必须统一(4 种结束 + Generation Fencing + 9 类可复现场景)
人工智能·后端·llm
颜进强1 小时前
Ollama 从入门到实践:本地模型运行、API 调用
前端·后端·ai编程
颜进强1 小时前
Embedding 基础使用:用 Ollama 和 LangChain.js 生成文本向量
前端·后端·ai编程
颜进强1 小时前
Vector Store 入门:什么是向量数据库,主流产品如何选择
前端·后端·ai编程