title: ORM框架与数据库交互

date: 2024/12/22

updated: 2024/12/22

author: cmdragon

excerpt:

对象关系映射(Object-Relational Mapping,ORM)框架是简化数据库与编程语言之间交互的强大工具。通过使用ORM,开发者可以避免直接编写SQL代码,便捷地执行CRUD操作,从而提高开发效率,减少错误。

categories:

  • 前端开发

tags:

  • ORM
  • 对象关系映射
  • 数据库交互
  • CRUD操作
  • 开发效率
  • 常见框架
  • 数据操作



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

对象关系映射(Object-Relational Mapping,ORM)框架是简化数据库与编程语言之间交互的强大工具。通过使用ORM,开发者可以避免直接编写SQL代码,便捷地执行CRUD操作,从而提高开发效率,减少错误。

一、ORM的基本概念

ORM(Object-Relational Mapping)是一种程序设计技术,旨在通过将数据库表映射为编程语言中的对象,来简化数据库操作。ORM允许开发者以对象的方式进行数据访问,自动处理SQL查询和数据映射。

1.1 ORM的优势

  • 减少SQL代码:开发者不需要直接编写大量的SQL查询代码,能够以对象的形式进行数据库操作。

  • 提高开发效率:ORM框架通常提供直观的API和查询功能,加快开发速度,减少手动操作的错误。

  • 跨数据库兼容性:很多ORM框架支持多种数据库类型,允许应用程序在不同的数据库系统之间轻松迁移。

  • 更好的数据抽象:通过对象化的方式操作数据,可以提高代码的可读性和可维护性。

二、常见的ORM框架

以下是一些广泛使用的ORM框架,它们在不同编程语言中具备良好的支持:

2.1 在Python中使用SQLAlchemy

SQLAlchemy是一个在Python中非常流行的ORM框架,提供强大的功能和灵活性。

创建模型

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker Base = declarative_base() class Customer(Base):
__tablename__ = 'customers'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String) # 数据库连接
engine = create_engine('mysql+pymysql://username:password@localhost/my_database')
Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)
session = Session() # 添加新客户
new_customer = Customer(name='John Doe', email='john@example.com')
session.add(new_customer)
session.commit()

2.2 在Java中使用Hibernate

Hibernate是Java中最常用的ORM框架,提供强大的性能和灵活性。

创建实体类

import javax.persistence.*;

@Entity
@Table(name = "customers")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; @Column(name = "name")
private String name; @Column(name = "email")
private String email; // getters and setters
}

配置Hibernate和保存数据

SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Customer.class)
.buildSessionFactory(); Session session = factory.getCurrentSession();
session.beginTransaction();
Customer customer = new Customer();
customer.setName("Jane Doe");
customer.setEmail("jane@example.com");
session.save(customer);
session.getTransaction().commit();

2.3 在PHP中使用Doctrine

Doctrine是PHP中流行的ORM库,提供灵活和强大的数据库操作功能。

创建实体类

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="customers")
*/
class Customer {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id; /** @ORM\Column(type="string") */
private $name; /** @ORM\Column(type="string") */
private $email; // Getters and Setters...
}

保存数据

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager; // 设置配置
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), true);
$entityManager = EntityManager::create($dbParams, $config); // 创建新客户
$customer = new Customer();
$customer->setName("Alex Smith");
$customer->setEmail("alex@example.com");
$entityManager->persist($customer);
$entityManager->flush();

三、ORM的最佳实践

3.1 文档化ORM模型

编写清晰的文档,描述模型的字段和关系,以提高团队协作的效率。

3.2 结合原生SQL

有时,ORM的查询性能较低,必要时可以结合原生SQL查询,以提高性能。

3.3 使用数据库迁移工具

利用ORM框架中提供的迁移功能,管理数据库结构的变更,确保在不同环境中数据库的一致性。

四、总结

ORM框架为数据库操作提供了高效的封装,大大提高了开发者的工作效率。通过正确使用ORM,开发者不仅可以简化CRUD操作,还能利用ORM的优势进行高效的数据管理决策。

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:ORM框架与数据库交互 | cmdragon's Blog

往期文章归档:

ORM框架与数据库交互的更多相关文章

  1. Android 自定义Android ORM 框架greenDAO数据库文件的路径

    import android.content.Context; import android.content.ContextWrapper; import android.database.Datab ...

  2. ORM框架查询数据库时返回指定的字段

    django model.objects.filter() 查询指定字段 1.model.objects.filter().values('field_name'),单个字段 2.model.obje ...

  3. 重学 Java 设计模式:实战中介者模式「按照Mybaits原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同龄人的差距是从什么时候拉开的 同样的幼儿园.同样的小学.一样 ...

  4. 自定义ORM框架(转转)

    ORM背景 在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用.在关系型数据结构理 论中,所有的数据都组织成一个个相互独立的二 ...

  5. 轻量级orm框架——gzero指南

    开发过web系统人一定对大量的curd不陌生,为了提高效率我们通常会使用一些orm框架做辅助,而不会直接操作数据库.但是现有的orm框架往往有两个通病(各种语言的都一样):1. API复杂:即使是有经 ...

  6. 数据库 ORM框架 ORMLite

    几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...

  7. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  8. ORM框架通过映射(反射)获取数据库的数据

    ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中.只要提供了持久化类与表的映射关系,ORM ...

  9. 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  10. 数据库ORM框架GreenDao

    常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9) ...

随机推荐

  1. 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串

    全网最适合入门的面向对象编程教程:55 Python 字符串与序列化-字节序列类型和可变字节字符串 摘要: 在 Python 中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些 ...

  2. map,unordered_map,multimap,unordered_multimap

    std::map(有序映射) std::unordered_map(无序映射) std::multimap(有序多重映射) std::unordered_multimap(无序多重映射) 它们的使用方 ...

  3. android启动时间测试

    需要对比基线测试的情况: Kernel log: adb shell dmesg Event log: adb shell logcat –b events Logcat log: adb shell ...

  4. 2024年5月中国数据库排行榜:OP持续领跑,GoldenDB稳步上升进前八

    入夏时节,2024年5月的中国流行度排行榜排行榜如期发布.在这个骄阳似火的季节,各大数据库产品之间的竞争愈发激烈,名次间的细微变动展示了市场的动态和活力.各家厂商不断创新,通过技术升级和性能优化,力求 ...

  5. 2021年11月墨天轮国产数据库排行榜:openGauss闯入前三,Kingbase流行度与日俱增,TDengine厚积薄发

    2021年11月的国产数据库流行度排行榜已在墨天轮发布,本月共有163家数据库参与排名.就前15名的总体情况来看,除openGauss反超OceanBase闯入前三,TDengine厚积薄发来到第15 ...

  6. kotlin更多语言结构——>This表达式

    This表达式 为了表示当前的 接收者 我们使用 this 表达式: - 在类的成员中,this指的是该类的当前对象. - 在扩展函数或者带有接收者的函数字面值中,this 表示在点左侧传递的 接收者 ...

  7. 乐观锁CAS

    在 Java 中,我们可以使用 synchronized 关键字和 CAS 来实现加锁效果. 悲观锁: 对于悲观锁来说,它总是认为每次访问共享资源时会发生冲突,所以必须对每次数据操作加上锁,以保证临界 ...

  8. AOT漫谈专题(第六篇): C# AOT 的泛型,序列化,反射问题

    一:背景 1. 讲故事 在 .NET AOT 编程中,难免会在 泛型,序列化,以及反射的问题上纠结和反复纠错尝试,这篇我们就来好好聊一聊相关的处理方案. 二:常见问题解决 1. 泛型问题 研究过泛型的 ...

  9. Robust Loop Closure by Textual Cues in Challenging Environments

    arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 [Robust Loop Closure by Textual Cues in Challenging Environmen ...

  10. 学习JavaScript第四天

    文章目录 1 回顾 内置对象 2 内置对象 2.1 Function 2.2 Global 3 DOM 部分知识点介绍 4 BOM 4.1 window ① 弹框 ② 打开关闭窗口 ③ 页面滚动 ④ ...