引言
Sequelize 是一个非常流行的 Node.js ORM 库,它允许开发者使用 JavaScript 对数据库进行操作,支持多种数据库,如 MySQL、PostgreSQL、SQLite、MSSQL 等。然而,Sequelize 也存在一些不足之处,如缺少类型检查、复杂的查询语句等。
TypeORM 是一个新兴的 Node.js ORM 库,它基于 TypeScript,提供了更加强大的类型检查和更加简洁的查询语句。本文将介绍 TypeORM 的使用方法,以及与 Sequelize 的对比。
安装
使用 npm 安装 TypeORM:
npm install typeorm reflect-metadata
其中,reflect-metadata 是必须的依赖项。
连接数据库
首先,需要在项目中创建一个 ormconfig.json 文件,用于配置数据库连接信息。例如,连接 MySQL 数据库:
-- -------------------- ---- ------- - ------- -------- ------- ------------ ------- ----- ----------- ------- ----------- ----------- ----------- ------- -------------- ----- ---------- ------ ----------- ---------------------- -展开代码
其中,entities 属性指定了实体类所在的目录,这里假设实体类放在 src/entity 目录下。
然后,在应用程序中创建一个连接:
import { createConnection } from 'typeorm'; createConnection() .then(() => console.log('Connection successfully')) .catch((error) => console.log('Connection failed', error));
定义实体类
TypeORM 中的实体类与 Sequelize 中的模型类类似,用于描述数据表的结构。例如,定义一个 User 实体类:
-- -------------------- ---- ------- ------ - ------- ----------------------- ------ - ---- ---------- --------- ------ ----- ---- - ------------------------- --- ------- --------- ----- ------- --------- ---- ------- --------- ------ ------- -展开代码
其中,@Entity() 装饰器表示该类为实体类,@PrimaryGeneratedColumn() 装饰器表示该属性为主键,@Column() 装饰器表示该属性为字段。
查询数据
TypeORM 提供了更加简洁的查询语句,例如,查询所有用户:
import { getRepository } from 'typeorm'; import { User } from './entity/User'; const userRepository = getRepository(User); const users = await userRepository.find(); console.log(users);
查询指定用户:
const user = await userRepository.findOne(1); console.log(user);
查询年龄大于 18 的用户:
const users = await userRepository.find({ where: { age: MoreThan(18) } }); console.log(users);
TypeORM 还支持链式调用,例如,查询年龄大于 18 并且邮箱以 gmail.com 结尾的用户:
const users = await userRepository .createQueryBuilder('user') .where('user.age > :age', { age: 18 }) .andWhere('user.email LIKE :email', { email: '%gmail.com' }) .getMany(); console.log(users);
更新数据
更新数据也非常简单,例如,将 id 为 1 的用户的邮箱修改为 new-email@gmail.com:
const user = await userRepository.findOne(1); user.email = 'new-email@gmail.com'; await userRepository.save(user);
删除数据
删除数据也非常简单,例如,删除 id 为 1 的用户:
await userRepository.delete(1);
总结
TypeORM 是一个非常强大的 Node.js ORM 库,它提供了更加强大的类型检查和更加简洁的查询语句,使用起来非常方便。与 Sequelize 相比,TypeORM 更加适合 TypeScript 项目,可以提高代码的可维护性和可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/662e6bc6d3423812e4c0f920