ORM框架与数据库交互

news/2024/12/22 0:28:28/文章来源:https://www.cnblogs.com/Amd794/p/18621589

title: ORM框架与数据库交互
date: 2024/12/22
updated: 2024/12/22
author: cmdragon

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

categories:

  • 前端开发

tags:

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

image
image

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

对象关系映射(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 sessionmakerBase = 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

往期文章归档:

  • 数据库与编程语言的连接 | cmdragon's Blog
  • 数据库审计与监控 | cmdragon's Blog
  • 数据库高可用性与容灾 | cmdragon's Blog
  • 数据库性能优化 | cmdragon's Blog
  • 备份与恢复策略 | cmdragon's Blog
  • 索引与性能优化 | cmdragon's Blog
  • 事务管理与锁机制 | cmdragon's Blog
  • 子查询与嵌套查询 | cmdragon's Blog
  • 多表查询与连接 | cmdragon's Blog
  • 查询与操作 | cmdragon's Blog
  • 数据类型与约束 | cmdragon's Blog
  • 数据库的基本操作 | cmdragon's Blog
  • 数据库设计原则与方法 | cmdragon's Blog
  • 数据库与数据库管理系统概述 | cmdragon's Blog
  • Nuxt.js 应用中的 afterResponse 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 request 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 error 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 close 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 render:island 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 render:html 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 render:response 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 dev:ssr-logs 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:progress 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:done 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:error 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:change 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:compiled 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:compile 事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 webpack:configResolved事件钩子 | cmdragon's Blog
  • Nuxt.js 应用中的 vite:compiled 事件钩子 | cmdragon's Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验6 模板类,文件I/O和异常处理

一、实验目的练习编写模板函数,模板类,从多态角度理解模板函数和模板类(类型作为参数) 体验标准I/O流类,文件I/O流类,字符串I/O流类的用法,能正确使用 针对问题场景,使用流类库对I/O数据进行格式化和读写操作 体验异常处理的基础用法,能解释异常处理的机制和流程 训练…

【IM专题】服务治理,是在谈什么?

先说交通治理。 没有交通治理,会是怎样的场景?见下图。交通没有治理,车流效率会大大降低,尤其是在十字路口这种有资源竞争的路段,交通很容易陷入瘫痪。 如果引入交通治理,会是怎样的场景?见下图。交通治理,通过使用信号灯或是建造立交桥,在即使有资源冲突的路口段,通…

[题解]AtCoder Beginner Contest 385(ABC385) A~F

A - Equally 显然分组情况一定是\(1+1+1\)或\(1+2\),直接判定即可。点击查看代码 #include<bits/stdc++.h> using namespace std; int a,b,c; signed main(){cin>>a>>b>>c;if((a+b==c)||(a+c==b)||(b+c==a)||(a==b&&b==c)) cout<<"…

【AI+模型】RAG 架构图解:从基础到高级的7种模式

RAG 技术通过在 AI 生成过程中引入外部知识检索,从基础的文档查询发展到多模态、Multi-Agent 体协同的智能架构,让 AI 回答更准确、更全面。 核心组件 嵌入模型: 将文本转换为向量表示 生成模型: 负责最终的内容生成 重排序模型: 优化检索结果的相关性 向量数据库:…

浅聊web前端性能测试

最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~ 首先从用户的思维去思考,关于web前端性能,用户最看重的是什么...... 其实就是下面三个点:1. 加载性能(即页面加载时间+资源加载时间)2. …

使用magic-api实现增删改查分页

创建项目结构 pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apach…

【安全评审】“2024网络安全100强-行业应用”评分全流程细则

一 指标理解1.1 “行业应用”的核心优势是什么?1.2 评估维度有哪些?二、评审专家筛选2.1 对专家所在单位有什么要求?2.2 对专家所在行业有什么要求?2.3 对专家个人能力有什么要求?2.4 对专家组有什么要求?2.5 对专家个人价值观有什么要求?三、评分规则制定3.1 “典型案例…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天,p9-p27 总结,总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是:c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum amount of any physical entity (physi…

第4章 C#的高级特性

第4章 C#的高级特性 4.1 委托 4.1.2 多播委托 对值为 null 的委托变量进行 + ​或 += ​操作,等价于为变量指定一个新值: SomeDelegate d = null; d += SomeMethod1; // 等价于 d = SomeMethod1委托是 不可变 的,因此调用 += ​和 -= ​的实质是 创建一个新的委托实例 ,…

使用frida分析白盒aes,DFA攻击

这次分析的app是:五菱汽车(8.2.1) 登录,抓包发现请求体只有sd字段,看见加密的时候,可以先使用算法助手hook java层所有加解密方法发现我们所需要的sd加密字段在java层hook不到,那加密算法应该是写在了so层,因为这个app是bb加固企业,得有脱壳机才能脱。 jadx加载dex,直接…

2024 golang安装使用详细教程以及常见问题处理(附激活至2099年)

GoLand 简介 GoLand 是一款非常强大的 Go 语言集成开发环境,由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 下面这种方式仅供交流学习,如果有能力还请支持正版 下载安装 为了方便,也可以去链接取 点击获取安装包开始安装下载完成…

Infinite Pixels(无限像素)第五次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 小组成员分工完成选题的软件设计组长 祝方略-2022329301131组员1 娄涵格-2022329301112组员2 颜宇航-2022329301125组员3 常佳鑫-2022329301071一、团队介绍团队名称:Infinite Pixels(无限像素…