使用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.xdnf.cn/news/979.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【2024】强网杯

web: PyBlockly: ​ 网站是一个通过block的堆积木的形式编程,有两种数据类型以及四种函数,分别是正常运算,print输出,min和max功能,随便写一些代码,发现结果会回显出来。 ​ 再来…

使用 Qt 实现自定义罗盘控件

用 Qt 编写一个简单的罗盘控件,该控件能够动态显示方向。该控件实现了一个带有北(N)和南(S)标记的圆形罗盘面盘,具有可以根据输入角度旋转的指针。 代码功能概述 该项目定义了一个 CompassWidget 类&…

项目模块十四:HttpRequest模块

一、项目设计思路 存储HTTP请求要素,提供简单接口 二、成员变量 全部公有 string _method; // 请求方法 string _path; // 资源路径 string _version; // 协议版本 string _body; // 请求正文 smatch _matches; // 资源路径正则提取 …

NASA:全球无机气溶胶酸度的机载观测和模拟比较

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 Airborne Observations and Modeling Comparison of Global Inorganic Aerosol Acidity 全球无机气溶胶酸度的机载观测和模拟比较 简介 该数据集提供了在2006年至2017年期间收集的十一项空中观测活…

汽车零部件展|2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会邀您共赏汽车行业盛会

汽车是我国国民经济的重要支柱行业,在我国国民经济中起到举足轻重的作用,也是现代高端制造业的代表。改革开放以来,我国汽车产销量保持增长态势,至 2017 年实现汽车销量 2,887.89 万辆。受到国际经济形势、居民需求下滑、国民经济…

JavaEE-多线程初阶(1)

目录 1. 线程的概念 1.1 线程是是什么 1.2 为什么要有线程 1.3 线程和进程的区别 1.4 Java的线程和操作系统线程的关系 2. 第一个多线程程序 2.1 Hello Thread 2.2 使用jconsole观察线程 3. 创建线程 3.1 继承Thread类 3.2 实现Runnable接口 1. 线程的概念 1.1 线程…

[FE] React 初窥门径(四):React 组件的加载过程(render 阶段)

1. 回顾 前几篇文章中,我们采用了 VSCode 插件 CodeTour 来记录代码的执行过程, 并把相关的数据 .tour/ 放到了 github: thzt/react-tour 中。 截止到本文为之,我们总共记录了这些 code-tour, .tour/ ├── 2. 构建过程.tour ├─…

ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念 WatchDog是一个开源的项目,可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常,有效帮助开发人员去排查应用异常,提升开发效…

Chrome浏览器音/视频无法自动播放

背景:由于google的一些制度,我们在写html项目时会发现刷新页面时无法自动播放audio和video,即使你添加了autoplay属性也无济于事, 但是IE和Edge浏览器是可以自动播放的。 解决方案: 本人在网上搜寻了很多方法&#xf…

WPF自定义日历控件Calendar 的方法

推荐下载地址 https://www.haolizi.net/example/view_2107.html <UserControl.Resources><local1:DayConverter x:Key"DayConverter"/><!--导入转换器--><Style x:Key"CalendarStyle1"TargetType"{x:Type Calendar}">&…

TOEIC 词汇专题:旅游计划篇

TOEIC 词汇专题&#xff1a;旅游计划篇 制定旅行计划时&#xff0c;尤其是跨国旅游&#xff0c;会涉及到很多独特的英语词汇。以下是与“旅游计划”相关的托业词汇&#xff0c;帮助你更加自如地规划行程。 1. 旅行服务和优惠 出发前了解一下与服务和优惠相关的常用词汇&#…

Java集合框架面试指南

Java集合框架面试指南 文章目录 Java集合框架面试指南ArrayList特点&#xff1a;LinkedList特点&#xff1a;ArrayDeque特点&#xff1a;PriorityQueue特点&#xff1a;HashMap特点&#xff1a;HashSet特点&#xff1a;LinkedHashMap特点LinkedHashMap经典用法 TreeMap特点Conc…

QEMU学习之路(4)— Xilinx开源项目systemctlm-cosim-demo安装与使用

QEMU学习之路&#xff08;4&#xff09;— Xilinx开源项目systemctlm-cosim-demo安装与使用 一、前言 项目说明&#xff1a;https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/862421112/Co-simulation 操作系统&#xff1a;Ubuntu 20.04.6 LTS gcc版本&#xff1a;9.4…

【Java知识】高性能网络应用框架Netty应知应会

文章目录 概述线程模型IO模型代码示例服务端代码示例客户端代码示例代码说明&#xff1a; 自定义协议实现自定义协议格式自定义编码器&#xff08;Encoder&#xff09;自定义解码器&#xff08;Decoder&#xff09;业务处理器&#xff08;Handler&#xff09;在Netty服务器管道…

AUTOSAR 规范中的设计模式:传感器执行器模式

在 AUTOSAR Adaptive Platform (AP) 规范中,传感器执行器模式是一种典型的设计模式,主要用于实时控制系统中,用来实现传感器数据的获取和执行器指令的发送。该模式通过分离传感器和执行器的实现,使其独立运行并且能够通过某种通信机制进行数据交换,以确保数据的实时性和系…

Linux:编辑器Vim和Makefile

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ vim的三种常用模式 分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09; 各模式的功能区分如下&…

【Linux】【进程控制】API汇总整理

进程控制是操作系统中一个非常重要的概念&#xff0c;它涉及到创建、管理和终止进程的能力。进程控制包括一系列操作&#xff0c;如创建新进程、等待进程结束、发送信号给进程等。下面是进程控制中一些常见的操作及其相关API&#xff1a; 进程控制概述 进程控制是指操作系统提…

HTML练习题:彼岸的花(web)

展示效果: 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>彼岸の花</title><style…

【安全性分析】正式安全分析与非正式安全分析

安全性分析-系列文章目录 第一章 【安全性分析】正式安全分析与非正式安全分析 第二章 【安全性分析】BAN逻辑 (BAN Logic) 文章目录 安全性分析-系列文章目录前言一、正式安全分析1. 理想化模型(如随机预言机模型)2. 标准模型(Standard Model)3. 形式化验证4. 数学证明二…

HTML小阶段二维表和思维导图

下面是对标签、元素、属性的对比二维表&#xff0c;通过对比3w1h&#xff08;what是什么、where用在哪、why为什么要用、how如何用&#xff09;来学习区分学习标签、元素、属性 标签 元素 属性 what &#xff08;Tags&#xff09;标签是用来标记内容块或标明元素内容意义 …