使用TypeORM进行数据库操作

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

使用TypeORM进行数据库操作

    • 引言
    • TypeORM 简介
      • 安装 TypeORM
      • 配置 TypeORM
      • 定义实体
      • 连接数据库
      • 运行项目
      • 高级功能
        • 事务管理
        • 关系管理
      • 最佳实践
        • 使用迁移
        • 启用日志记录
        • 优化性能
      • 实际案例
      • 总结

引言

在现代Web开发中,数据库操作是不可或缺的一部分。TypeORM 是一个非常流行的 ORM(对象关系映射)库,支持 TypeScript 和 JavaScript,可以用于多种数据库,如 MySQL、PostgreSQL、SQLite、MSSQL 等。本文将详细介绍如何使用 TypeORM 进行数据库操作,包括安装、配置、实体定义、CRUD 操作等内容。

TypeORM 简介

TypeORM 是一个基于数据映射模式的 ORM 库,它允许开发者使用面向对象的方式与数据库进行交互。TypeORM 的主要特点包括:

  • 支持多种数据库:支持 MySQL、PostgreSQL、SQLite、MSSQL 等多种数据库。
  • 强类型支持:由于使用 TypeScript,TypeORM 提供了强类型检查,减少了运行时错误。
  • 丰富的功能:支持事务、迁移、关系管理等多种高级功能。
  • 社区支持:拥有活跃的社区和丰富的文档资源。

安装 TypeORM

在使用 TypeORM 之前,需要先安装必要的依赖。假设你已经安装了 Node.js 和 npm,可以使用以下命令安装 TypeORM 和相应的数据库驱动:

npm install typeorm reflect-metadata
npm install @types/node typescript --save-dev

根据你使用的数据库,安装相应的驱动。例如,对于 PostgreSQL:

npm install pg

配置 TypeORM

TypeORM 的配置可以通过多种方式进行,最常见的是使用 ormconfig.json 文件。在项目根目录下创建 ormconfig.json 文件:

{"type": "postgres","host": "localhost","port": 5432,"username": "your_username","password": "your_password","database": "your_database","synchronize": true,"logging": false,"entities": ["src/entity/**/*.ts"],"migrations": ["src/migration/**/*.ts"],"subscribers": ["src/subscriber/**/*.ts"]
}

定义实体

实体是 TypeORM 中表示数据库表的类。在 src/entity 目录下创建一个 User.ts 文件,定义用户实体:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';@Entity()
export class User {@PrimaryGeneratedColumn()id: number;@Column()name: string;@Column()email: string;
}

连接数据库

在项目根目录下创建 index.ts 文件,连接数据库并执行一些基本操作:

import { createConnection } from 'typeorm';
import { User } from './entity/User';createConnection().then(async connection => {console.log('Connected to database');// 创建用户const userRepository = connection.getRepository(User);const user = new User();user.name = 'John Doe';user.email = 'john.doe@example.com';await userRepository.save(user);console.log('User saved:', user);// 查询用户const users = await userRepository.find();console.log('Users:', users);// 更新用户user.name = 'Jane Doe';await userRepository.save(user);console.log('User updated:', user);// 删除用户await userRepository.remove(user);console.log('User deleted:', user);
}).catch(error => console.log(error));

运行项目

使用以下命令编译和运行项目:

npx tsc
node dist/index.js

高级功能

事务管理
TypeORM 支持事务管理,可以确保多个操作的原子性。

await connection.transaction(async manager => {const user = new User();user.name = 'Alice';user.email = 'alice@example.com';await manager.save(user);const post = new Post();post.title = 'First Post';post.content = 'This is the first post.';post.user = user;await manager.save(post);
});

关系管理
TypeORM 支持多种关系类型,如一对一、一对多、多对多等。

import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from 'typeorm';
import { Post } from './Post';@Entity()
export class User {@PrimaryGeneratedColumn()id: number;@Column()name: string;@Column()email: string;@OneToMany(type => Post, post => post.user)posts: Post[];
}import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
import { User } from './User';@Entity()
export class Post {@PrimaryGeneratedColumn()id: number;@Column()title: string;@Column()content: string;@ManyToOne(type => User, user => user.posts)user: User;
}

最佳实践

使用迁移
迁移可以帮助你管理数据库结构的变化。首先,安装迁移工具:

npm install typeorm @types/node typescript --save-dev

然后,创建和运行迁移:

npx typeorm migration:create -n CreateUsersTable
npx typeorm migration:run

启用日志记录
启用日志记录可以帮助你调试和优化查询性能:

{"logging": true
}

优化性能
合理使用索引和查询优化可以显著提高数据库性能。例如,为经常查询的列创建索引:

@Column({ unique: true })
email: string;

实际案例

TypeORM 已经被广泛应用于各种场景,例如:

  • Web 应用:管理用户、订单和产品数据。
  • API 开发:构建 RESTful API,处理数据请求。
  • 数据同步:同步不同数据源的数据。

总结

通过本文,你已经学会了如何使用 TypeORM 进行数据库操作。TypeORM 的强大功能和灵活性使其成为现代 Web 开发的理想选择。
TypeORM 数据库操作流程图

TypeORM 支持多种高级功能,如事务管理、关系管理和迁移,可以显著提高数据库操作的效率和可靠性。

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

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

相关文章

ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板

项目简介 在生活品质日益提升的今天,智能家居系统已经走进了千家万户,并逐渐成为现代生活的一部份。与此同时,一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板,已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…

Hadoop生态圈框架部署(四)- Hadoop完全分布式部署

文章目录 前言一、Hadoop完全分布式部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 hdfs-site…

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结,展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式,和业务规则。使用一个强大的数据模型模式的数据建模,评估特定与广义模型的优缺点,有助于你改…

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Mongodb未授权访问

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Golang--流程控制

1、分支结构 1.1 if分支 单分支 语法:if 条件表达式 { 逻辑代码 } 当条件表达式为true时,就会执行代码块的代码。条件表达式左右的()可以不写,也建议不写 if和表达式中间,一定要有空格在Golang中,{}是必须有的,就算你…

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线,因为行业网络安全要求,需要做等保测评, 通过第三方漏扫工具扫描系统,漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞,具体结果如下: 1、ZooKeeper 未授权访问【…

Serverless + AI 让应用开发更简单

本文整理自 2024 云栖大会,阿里云智能高级技术专家,史明伟演讲议题《Serverless AI 让应用开发更简单》 随着云计算和人工智能(AI)技术的飞速发展,企业对于高效、灵活且成本效益高的解决方案的需求日益增长。本文旨在…

从0开始学PHP面向对象内容之(类,对象,构造/析构函数)

上期我们讲了面向对象的一些基本信息&#xff0c;这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法&#xff1a; <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…

(八)JavaWeb后端开发——Tomcat

目录 1.Web服务器概念 2.tomcat 1.Web服务器概念 服务器&#xff1a;安装了服务器软件的计算机服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应web服务器软件&#xff1a;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通…

【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Nuxt.js 应用中的 nitro:config 事件钩子详解

title: Nuxt.js 应用中的 nitro:config 事件钩子详解 date: 2024/11/2 updated: 2024/11/2 author: cmdragon excerpt: nitro:config 是 Nuxt 3 中的一个生命周期钩子,允许开发者在初始化 Nitro 之前自定义 Nitro 的配置。Nitro 是 Nuxt 3 的服务器引擎,负责处理请求、渲…

[论文阅读]LOGAN: Membership Inference Attacks Against Generative Models

LOGAN: Membership Inference Attacks Against Generative Models https://arxiv.org/abs/1705.07663v4 Proceedings on Privacy Enhancing Technologies &#xff08;PoPETs&#xff09;&#xff0c;第 2019 卷&#xff0c;第 1 期。 这篇文章是17年的一篇文章&#xff0c;…

使用Vite构建现代化前端应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Vite构建现代化前端应用 引言 Vite 简介 安装 Vite 创建项目 启动开发服务器 项目结构 配置 Vite 开发模式 生产构建 使用插…

Node.js:模块 包

Node.js&#xff1a;模块 & 包 模块module对象 包npm安装包配置文件镜像源 分类 模块 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 简单来说&#xff0c;就是把一个…

【Arduino】一分钟快速在vs code 编译开发Arduino

下载Arduino 对于一些开发者来说&#xff0c;Arduino开发较为不方便&#xff0c;不管从代码的阅读性、开发效率等等方面&#xff0c;vs code都要优于Arduino IDE开发&#xff0c;而且vs code开发可以使用插件&#xff0c;比如一些AI代码插件&#xff0c;可以加快开发速率&#…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别&#xff1f;Java关键字有哪些&#xff1f;Java基本数据类型有哪些&#xff1f;什么是自动装箱和拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09; 自动装箱和拆…

c# 值类型

目录 1、c#类型2、值类型2.1 结构体2.2 枚举 1、c#类型 类型&#xff08;Type&#xff09;又叫数据类型&#xff08;Data Type&#xff09;。 A data type is a homogeneous collection of values,effectively prensented,equipped with a set of operations which manipulate…

【压力测试】如何确定系统最大并发用户数?

一、明确测试目的与了解需求 明确测试目的&#xff1a;首先需要明确测试的目的&#xff0c;即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求&#xff1a;深入了解系统的业务特性&#xff0c;包括用户行…