TypeORM 是一个ORM框架,它可以运行在 NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、Expo 和 Electron 平台上,可以与 TypeScript 和 JavaScript (ES5,ES6,ES7,ES8)一起使用。 它的目标是始终支持最新的 JavaScript 特性并提供额外的特性以帮助你开发任何使用数据库的(不管是只有几张表的小型应用还是拥有多数据库的大型企业应用)应用程序。

不同于现有的所有其他 JavaScript ORM 框架,TypeORM 支持 Active RecordData Mapper 模式,这意味着你可以以最高效的方式编写高质量的、松耦合的、可扩展的、可维护的应用程序。

TypeORM 参考了很多其他优秀 ORM 的实现, 比如 Hibernate, DoctrineEntity Framework

TypeORM 的一些特性:

  • 支持 DataMapperActiveRecord (随你选择)
  • 实体和列
  • 数据库特性列类型
  • 实体管理
  • 存储库和自定义存储库
  • 清晰的对象关系模型
  • 关联(关系)
  • 贪婪和延迟关系
  • 单向的,双向的和自引用的关系
  • 支持多重继承模式
  • 级联
  • 索引
  • 事务
  • 迁移和自动迁移
  • 连接池
  • 主从复制
  • 使用多个数据库连接
  • 使用多个数据库类型
  • 跨数据库和跨模式查询
  • 优雅的语法,灵活而强大的 QueryBuilder
  • 左联接和内联接
  • 使用联查查询的适当分页
  • 查询缓存
  • 原始结果流
  • 日志
  • 监听者和订阅者(钩子)
  • 支持闭包表模式
  • 在模型或者分离的配置文件中声明模式
  • json / xml / yml / env 格式的连接配置
  • 支持 MySQL / MariaDB / Postgres / SQLite / Microsoft SQL Server / Oracle / sql.js
  • 支持 MongoDB NoSQL 数据库
  • 可在 NodeJS / 浏览器 / Ionic / Cordova / React Native / Expo / Electron 平台上使用
  • 支持 TypeScript 和 JavaScript
  • 生成高性能、灵活、清晰和可维护的代码
  • 遵循所有可能的最佳实践
  • 命令行工具

还有更多…

通过使用 TypeORM 你的 models 看起来像这样:

  1. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
  2. @Entity()
  3. export class User {
  4. @PrimaryGeneratedColumn()
  5. id: number;
  6. @Column()
  7. firstName: string;
  8. @Column()
  9. lastName: string;
  10. @Column()
  11. age: number;
  12. }

逻辑操作就像是这样:

  1. const user = new User();
  2. user.firstName = "Timber";
  3. user.lastName = "Saw";
  4. user.age = 25;
  5. await repository.save(user);
  6. const allUsers = await repository.find();
  7. const firstUser = await repository.findOne(1); // find by id
  8. const timber = await repository.findOne({ firstName: "Timber", lastName: "Saw" });
  9. await repository.remove(timber);

或者,如果你更喜欢使用ActiveRecord实现,也可以这样用:

  1. import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm";
  2. @Entity()
  3. export class User extends BaseEntity {
  4. @PrimaryGeneratedColumn()
  5. id: number;
  6. @Column()
  7. firstName: string;
  8. @Column()
  9. lastName: string;
  10. @Column()
  11. age: number;
  12. }

逻辑操作如下所示:

  1. const user = new User();
  2. user.firstName = "Timber";
  3. user.lastName = "Saw";
  4. user.age = 25;
  5. await user.save();
  6. const allUsers = await User.find();
  7. const firstUser = await User.findOne(1);
  8. const timber = await User.findOne({ firstName: "Timber", lastName: "Saw" });
  9. await timber.remove();

入门