typeorm官方文档
typeorm官方文档
qq_27664967
这个作者很懒,什么都没留下…
展开
-
8.6-支持
支持发现错误或想提出新功能?如果你发现了 bug,issue,或者你只是想提出一个新功能,请在 github 上创建 issue。有问题?如果你有疑问,可以在StackOverflow上询问。想要社区支持?如果你需要社区支持,或者只是想与 TypeORM 爱好者和用户聊天,你可以在[gitter](https://gitter.im/typeorm/typeorm)中进行。想要专业的商业支持?TypeORM 核心团队随时准备提供专业的商业支持。我们愿意与世界任何地方的任何团队合作。请联系转载 2020-10-28 20:12:34 · 79 阅读 · 0 评论 -
8.5-更新日志
更新日志更新日志转载 2020-10-28 20:12:24 · 130 阅读 · 0 评论 -
8.4-路线图
产品路线图了解我们期望在下一个 TypeORM 版本中获得的惊人新功能。关于 1.0.0 版本的说明我们计划在 2018 年秋季的某个时间点发布一个最终稳定的1.0.0版本。但是,TypeORM 已经在许多大型生产系统中得到了积极的应用。主 API 已经非常稳定。TypeORM 遵循语义版本控制,直到1.0.0,重大更改可能出现在0.x.x版本中。但是,由于 API 已经相当稳定,我们预计不会有太多的重大变化。如何安装最新的开发版本?要安装最新的开发版本,请使用以下命令:npm i ty转载 2020-10-28 20:12:15 · 62 阅读 · 0 评论 -
8.3-装饰器参考
装饰器参考实体装饰器@Entity@ViewEntity列装饰器@Column@PrimaryColumn@PrimaryGeneratedColumn@ObjectIdColumn@CreateDateColumn@UpdateDateColumn@VersionColumn@Generated关系装饰器@OneToOne@ManyToOne@OneToMany@ManyToMany@JoinColumn@JoinTable@RelationId转载 2020-10-28 20:12:05 · 181 阅读 · 0 评论 -
8.2-支持的平台
支持的平台NodeJSBrowserCordova/PhoneGap/Ionic appsReact NativeExpoNativeScriptNodeJSTypeORM 在 Node.js 版本 4 及更高版本上进行了测试。Browser你可以在浏览器中使用sql.js。Webpack 配置在browser文件夹中,该软件包还包括一个编译为 ES2015 模块的版本。 如果你想使用不同的加载器,可以使用该版本。 在 TypeORM 0.1.7 之前,软件包的设置方式使得像 w转载 2020-10-28 20:11:44 · 78 阅读 · 0 评论 -
8.1-FAQ
FAQ如何更新数据库架构?如何更改数据库中的列名?如何将默认值设置为某个函数,例如NOW()?怎么做验证?关系中的"owner side"意味着什么或为什么我们需要使用@JoinColumn和@JoinTable?如何在多对多(联结)表中添加额外的列?如何使用TypeORM与依赖注入工具?如何处理TypeScript编译器的outDir选项?如何将TypeORM和ts-node一起使用?后端如何使用Webpack?打包迁移文件如何更新数据库架构?TypeORM 的主要职责转载 2020-10-28 20:11:34 · 91 阅读 · 0 评论 -
7.6-从Sequelize迁移
从 Sequelize 迁移到 TypeORM建立连接架构同步创建模型其他模型设置建立连接在 sequelize 中,可以通过以下方式创建连接:const sequelize = new Sequelize("database", "username", "password", { host: "localhost", dialect: "mysql"});sequelize .authenticate() .then(() => { console.l转载 2020-10-28 20:11:24 · 83 阅读 · 0 评论 -
7.5-JavaScript示例
使用 JavaScriptTypeORM 不仅可以用于 TypeScript,还可以用于 JavaScript。一切都是一样的,除了需要省略类型,如果你的平台不支持 ES6 类,那么你需要定义具有所有必需元数据的对象。app.jsvar typeorm = require("typeorm");typeorm .createConnection({ type: "postgres", host: "localhost", port: 5432, usernam转载 2020-10-28 20:11:15 · 60 阅读 · 0 评论 -
7.4-Express示例
使用 TypeORM 和 Express 的示例初始设置将Express添加到应用程序将TypeORM添加到应用程序初始设置让我们创建一个名为"user"的简单应用程序,它将用户存储在数据库中并允许我们在 web api 创建、更新、删除和获取所有用户的列表,以及通过 id 获取的单个用户。首先,创建一个名为"user"的目录:mkdir user然后切换到目录并创建一个新项目:cd usernpm init通过填写所有必需的应用程序信息来完成初始化过程。现在我们需要安装和转载 2020-10-28 20:11:06 · 183 阅读 · 0 评论 -
7.3-使用验证
使用 Validation要使用验证,请使用class-validator。示例如何在 TypeORM 中使用 class-validator:import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";import { Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max } from "class-validator";@Entity()export cla转载 2020-10-28 20:10:56 · 121 阅读 · 0 评论 -
7.2-使用MongoDB
MongoDBMongoDB支持定义实体和列定义subdocuments(embed documents)使用MongoEntityManager和MongoRepositoryMongoDB支持TypeORM 具有基本的 MongoDB 支持。TypeORM 大多数功能都是特定于 RDBMS 的,此页面包含了所有 MongoDB 特定的功能文档。定义实体和列定义实体和列几乎与关系数据库中的相同,主要区别在于你必须使用@ObjectIdColumn而不是@PrimaryColumn或转载 2020-10-28 20:10:46 · 265 阅读 · 0 评论 -
7.1-Active Record vs Data Mapper
Active Record 与 Data Mapper什么是Active Record模式?什么是Data Mapper模式?我应该选择哪一个?什么是Active Record模式?在 TypeORM 中,你可以使用 Active Record 和 Data Mapper 模式。使用 Active Record 方法,你可以在模型本身内定义所有查询方法,并使用模型方法保存、删除和加载对象。简单来说,Active Record 模式是一种在模型中访问数据库的方法。你可以在Wikipedia转载 2020-10-28 20:10:35 · 197 阅读 · 0 评论 -
6.6-使用CLI
使用 CLI关于TypeScript编写实体的说明初始化一个新的TypeORM项目创建一个新实体创建一个新订阅者创建新迁移从现有表结构生成迁移运行迁移还原迁移同步数据库架构记录同步数据库架构查询而不运行删除数据库架构运行任意SQL查询清除缓存检查版本关于TypeScript编写实体的说明此 CLI 工具使用 javascript 编写,并在 node 上运行。如果你的实体文件是 TypeScript 编写,则需要在使用 CLI 之前将它们转换为 javascript。如果转载 2020-10-28 20:10:25 · 184 阅读 · 0 评论 -
6.5-日志
日志开启日志日志选项记录耗时长的查询更改默认记录器使用自定义记录器开启日志你只需在连接选项中设置logging:true即可启用所有查询和错误的记录:{ name: "mysql", type: "mysql", host: "localhost", port: 3306, username: "test", password: "test", database: "test", ... logging: true转载 2020-10-28 20:10:15 · 200 阅读 · 0 评论 -
6.4-监听者和订阅者
实体监听器和订阅者监听器@AfterLoad@BeforeInsert@AfterInsert@BeforeUpdate@AfterUpdate@BeforeRemove@AfterRemove订阅者监听器任何实体都可以使用具有侦听特定实体事件的自定义逻辑的方法。你必须使用特殊装饰器标记这些方法,具体取决于要侦听的事件。@AfterLoad你可以在实体中定义具有任何名称的方法,并使用@AfterLoad标记它,TypeORM 将在每次实体时调用它使用QueryBuil转载 2020-10-28 20:10:05 · 277 阅读 · 0 评论 -
6.3-索引
索引单列索引唯一索引联合索引空间索引禁用同步单列索引你可以在要创建索引的列上使用@Index为特定列创建数据库索引。也可以为实体的任何列创建索引。例如:import { Entity, PrimaryGeneratedColumn, Column, Index } from "typeorm";@Entity()export class User { @PrimaryGeneratedColumn() id: number; @Index() @Column(转载 2020-10-28 20:09:54 · 113 阅读 · 0 评论 -
6.2-事务
事务创建和使用事务指定隔离级别事务装饰器使用QueryRunner创建和控制单个数据库连接的状态创建和使用事务事务是使用Connection或EntityManager创建的。例如:import { getConnection } from "typeorm";await getConnection().transaction(transactionalEntityManager => {});orimport { getManager } from "typeor转载 2020-10-28 20:09:45 · 202 阅读 · 0 评论 -
6.1-迁移
迁移迁移的工作原理创建新迁移运行和还原迁移生成迁移使用迁移 API 编写迁移迁移的工作原理一旦上线生产环境,你将需要将模型更改同步到数据库中。通常在数据库中获取数据后,使用synchronize:true进行生产模式同步是不安全的。 因此这时候使用迁移,可以解决此类问题。迁移只是一个带有 SQL 查询的文件,用于更新数据库架构并将新更改应用于现有数据库。假设你已经有一个数据库和一个 post 实体:import { Entity, Column, PrimaryGeneratedC转载 2020-10-28 20:09:33 · 275 阅读 · 0 评论 -
5.6-结果缓存
缓存查询你可以缓存getMany,getOne,getRawMany,getRawOne和getCount这些QueryBuilder方法的查询结果。还可以缓存find,findAndCount,findByIds和count这些Repository方法查询的结果。要启用缓存,需要在连接选项中明确启用它:{ type: "mysql", host: "localhost", username: "test", ... cache: true}首次启用缓存翻译 2020-10-28 20:09:08 · 160 阅读 · 0 评论 -
5.5-与Relations结合
与 Relations 结合RelationQueryBuilder是QueryBuilder的一种允许你使用关系来查询的特殊类型。通过使用你可以在数据库中将实体彼此绑定,而无需加载任何实体,或者可以轻松地加载相关实体。例如:例如,我们有一个Post实体,它与Category有一个多对多的关系,叫做categories。让我们为这种多对多关系添加一个新 category:import { getConnection } from "typeorm";await getConnection()转载 2020-10-28 20:08:58 · 121 阅读 · 0 评论 -
5.4-使用Query Builder删除
使用 Query Builder 删除你可以使用QueryBuilder创建DELETE查询。例如:import { getConnection } from "typeorm";await getConnection() .createQueryBuilder() .delete() .from(User) .where("id = :id", { id: 1 }) .execute();就性能而言,这是删除数据库中的实体的最有效方法。...转载 2020-10-28 20:08:47 · 391 阅读 · 0 评论 -
5.3-使用Query Builder更新
使用 Query Builder 更新你可以使用QueryBuilder创建UPDATE查询。例如:import { getConnection } from "typeorm";await getConnection() .createQueryBuilder() .update(User) .set({ firstName: "Timber", lastName: "Saw" }) .where("id = :id", { id: 1 }) .execute();就性能转载 2020-10-28 20:08:36 · 807 阅读 · 0 评论 -
5.2-使用Query Builder插入
使用 Query Builder 插入你可以使用QueryBuilder创建INSERT查询。例如:import { getConnection } from "typeorm";await getConnection() .createQueryBuilder() .insert() .into(User) .values([{ firstName: "Timber", lastName: "Saw" }, { firstName: "Phantom", lastName: "L转载 2020-10-28 20:08:25 · 415 阅读 · 0 评论 -
5.1-使用Query Builder查询
使用 Query Builder 查询什么是QueryBuilder如何创建和使用QueryBuilder使用QueryBuilder获取值什么是别名?使用参数来转义数据添加WHERE表达式添加HAVING表达式添加ORDER BY表达式添加GROUP BY表达式添加LIMIT表达式添加OFFSET表达式联查内联和左联不使用条件的联查联查任何实体或表联查和映射功能获取生成的sql查询语句获得原始结果流数据分页加锁查询部分字段使用子查询隐藏列什么是Quer转载 2020-10-28 20:08:15 · 2417 阅读 · 0 评论 -
4.6-Repository API
Repository APIRepositoryAPITreeRepositoryAPIMongoRepositoryAPIRepositoryAPImanager - 存储库使用的EntityManager。const manager = repository.manager;metadata - 存储库管理的实体的EntityMetadata。更多关于实体元数据中的事务.const metadata = repository.metadata;queryRunner转载 2020-10-28 20:08:04 · 216 阅读 · 0 评论 -
4.5-实体管理器API
EntityManager APIconnection - 使用EntityManager连接。const connection = manager.connection;queryRunner - EntityManager使用的查询运行器。仅在 EntityManager 的事务实例中使用。const queryRunner = manager.queryRunner;transaction - 提供在单个数据库事务中执行多个数据库请求的事务。更多关于 事务.await m转载 2020-10-28 20:07:54 · 84 阅读 · 0 评论 -
4.4-自定义Repository
自定义存储库你可以创建一个自定义存储库,其中应包含使用数据库的方法。通常为单个实体创建自定义存储库,并包含其特定查询。比如,假设我们想要一个名为findByName(firstName:string,lastName:string)的方法,它将按给定的 first 和 last names 搜索用户。这个方法的最好的地方是在Repository,所以我们可以这样称呼它userRepository.findByName(...)。你也可以使用自定义存储库来实现此目的。有几种方法可以创建自定义存储库转载 2020-10-28 20:07:43 · 285 阅读 · 0 评论 -
4.3-Find选项
Find 选项基础选项进阶选项基础选项所有存储库和管理器find方法都接受可用于查询所需数据的特殊选项,而无需使用QueryBuilder:select - 表示必须选择对象的哪些属性userRepository.find({ select: ["firstName", "lastName"] });relations - 关系需要加载主体。 也可以加载子关系(join 和 leftJoinAndSelect 的简写)userRepository.find({ relation转载 2020-10-28 20:07:31 · 204 阅读 · 0 评论 -
4.2-使用Repository
什么是 RepositoryRepository就像EntityManager一样,但其操作仅限于具体实体。你可以通过getRepository(Entity),Connection#getRepository或EntityManager#getRepository访问存储库。例如:import { getRepository } from "typeorm";import { User } from "./entity/User";const userRepository = getRepo转载 2020-10-28 20:07:21 · 633 阅读 · 0 评论 -
4.1-使用Entity Manager
什么是 EntityManager使用EntityManager,你可以管理(insert, update, delete, load 等)任何实体。EntityManager 就像放一个实体存储库的集合的地方。你可以通过getManager()或Connection访问实体管理器。如何使用它:import { getManager } from "typeorm";import { User } from "./entity/User";const entityManager = getM转载 2020-10-28 20:07:12 · 553 阅读 · 0 评论 -
3.6-关系常见问题
关系常见问题如何创建自引用关系如何使用关系id而不加入关系如何在实体中加载关系避免关系属性初始化器如何创建自引用关系自引用关系是与自身有关系的关系。当你将实体存储在树状结构中时,这会非常有用。"adjacency list"模式也使用自引用关系来实现。例如,你想在应用程序中创建 categories 树。Categories 可以嵌套 categories,嵌套类别可以嵌套其他类别等。自引用关系在这里很方便。基本上,自引用关系只是针对实体本身的常规关系。例如:import {转载 2020-10-28 20:06:54 · 104 阅读 · 0 评论 -
3.5-Eager 和 Lazy 关系
Eager 和 Lazy 关系Eager 关系每次从数据库加载实体时,都会自动加载 Eager 关系。例如:import { Entity, PrimaryGeneratedColumn, Column, ManyToMany } from "typeorm";import { Question } from "./Question";@Entity()export class Category { @PrimaryGeneratedColumn() id: number; @转载 2020-10-28 20:06:42 · 233 阅读 · 0 评论 -
3.4-多对多
多对多的关系多对多是一种 A 包含多个 B 实例,而 B 包含多个 A 实例的关系。我们以Question 和 Category 实体为例。Question 可以有多个 categories, 每个 category 可以有多个 questions。import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";@Entity()export class Category { @PrimaryGeneratedColumn(转载 2020-10-28 20:06:22 · 98 阅读 · 0 评论 -
3.3-多对一和一对多
多对一/一对多的关系多对一/一对多是指 A 包含多个 B 实例的关系,但 B 只包含一个 A 实例。让我们以User 和 Photo 实体为例。User 可以拥有多张 photos,但每张 photo 仅由一位 user 拥有。import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm";import { User } from "./User";@Entity()export class Photo转载 2020-10-28 20:06:09 · 444 阅读 · 0 评论 -
3.2-一对一
一对一一对一是一种 A 只包含一个 B 实例,而 B 只包含一个 A 实例的关系。我们以User和Profile实体为例。用户只能拥有一个配置文件,并且一个配置文件仅由一个用户拥有。import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";@Entity()export class Profile { @PrimaryGeneratedColumn() id: number; @Column() gend转载 2020-10-28 20:05:59 · 43 阅读 · 0 评论 -
3.1-什么是关系?
关系什么是关系关系选项级联@JoinColumn选项@JoinTable选项什么是关系关系可以帮助你轻松地与相关实体合作。有几种类型的关系:一对一 使用 @OneToOne多对一 使用 @ManyToOne一对多 使用 @OneToMany多对多 使用 @ManyToMany关系选项你可以为关系指定几个选项:eager: boolean - 如果设置为 true,则在此实体上使用find * 或QueryBuilder时,将始终使用主实体加载关系cascade: b转载 2020-10-28 20:05:49 · 179 阅读 · 0 评论 -
2.5-分离实体定义
分离实体定义定义Schemas扩展Schemas使用Schemas定义架构你可以使用装饰器在模型中定义实体及其列。但有些人更喜欢在单独的文件中定义一个实体及其列,这些文件在TypeORM中称为"entity schemas"。简单定义示例:import {EntitySchema} from "typeorm";export const CategoryEntity = new EntitySchema({ name: "category", columns: {转载 2020-10-28 20:05:39 · 175 阅读 · 0 评论 -
2.4-树实体
树实体TypeORM支持用于存储树结构的Adjacency列表和Closure表模式。要了解有关层次结构表的更多信息,请查看this awesome presentation by Bill Karwin。邻接清单嵌套集物化路径(又名路径枚举)闭合表使用树实体邻接清单邻接列表是一个具有自引用的简单模型。这种方法的好处是简单,缺点是由于连接限制,您无法一次性加载整个树结构。要了解有关邻接列表的好处和用途的更多信息,请参阅 this article by Matthew Schinck转载 2020-10-28 20:05:28 · 337 阅读 · 0 评论 -
2.3-实体继承
实体继承具体表继承单表继承使用嵌入式具体表继承你可以使用实体继承模式减少代码中的重复。最简单和最有效的是具体的表继承。例如,你有Photo,Question,Post三个实体:@Entity()export class Photo { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() description: strin转载 2020-10-28 20:05:18 · 171 阅读 · 0 评论 -
2.2-嵌入式实体
嵌入式实体通过使用embedded columns,可以减少应用程序中的重复(使用组合而不是继承)。嵌入列是一个列,它接受具有自己列的类,并将这些列合并到当前实体的数据库表中。例如:假设我们有User,Employee和Student实体。这些属性都有少量的共同点,first name 和 last name属性。import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";@Entity()export class User转载 2020-10-28 20:05:07 · 122 阅读 · 0 评论