在 Web 开发中,数据库是非常重要的一部分。而在 Node.js 的应用中,Typeorm 提供了一种非常优雅的方式来管理数据库模型。结合 TypeScript 的强类型特性,可以让我们更加安全、方便地操作数据库。
Typeorm 简介
Typeorm 是一个对象关系映射(ORM)框架,它可以将数据库中的数据映射到 JavaScript 对象中,同时也可以将 JavaScript 对象保存到数据库中。Typeorm 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、Oracle 等。
Typeorm 的优点在于它的 API 设计非常简单易用,同时也提供了非常丰富的功能,如查询构建器、事务、关系映射等。此外,Typeorm 还支持 TypeScript,可以让我们在开发过程中更加安全、方便地操作数据库。
TypeScript 简介
TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的超集,可以编译成纯 JavaScript 代码。TypeScript 支持强类型、接口、泛型等特性,可以让我们在开发过程中更加安全、高效地编写代码。
TypeScript 的优点在于它可以提供静态类型检查,能够在编译阶段就发现一些错误,避免在运行时出现异常。此外,TypeScript 还提供了非常好的编辑器支持,如代码补全、重构等。
Typeorm + TypeScript 实践
下面我们来看一个简单的 Typeorm + TypeScript 的实践。假设我们有一个用户表,包含 id、name、age 三个字段,我们需要实现增删改查的功能。
首先,我们需要安装 Typeorm 和相关的数据库驱动:
npm install typeorm mysql
然后,我们需要配置 Typeorm 的连接信息,创建一个 typeorm.config.ts
文件:
// javascriptcn.com 代码示例 import { ConnectionOptions } from "typeorm"; const config: ConnectionOptions = { type: "mysql", host: "localhost", port: 3306, username: "root", password: "123456", database: "test", synchronize: true, entities: ["src/entities/*.ts"], }; export default config;
上面的配置信息中,我们指定了数据库类型为 MySQL,连接信息为 localhost:3306,用户名为 root,密码为 123456,数据库名为 test。synchronize
表示 Typeorm 是否自动同步数据库模型和数据库表结构,entities
表示实体类所在的文件夹路径。
接着,我们需要定义一个用户实体类,创建一个 User.ts
文件:
// javascriptcn.com 代码示例 import { Entity, Column, PrimaryGeneratedColumn } from "typeorm"; @Entity() export default class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() age: number; }
上面的代码中,我们使用了 Typeorm 提供的装饰器来定义实体类。@Entity()
表示这是一个实体类,@PrimaryGeneratedColumn()
表示 id 字段是一个自增主键,@Column()
表示 name 和 age 字段是普通字段。
接着,我们需要创建一个用户仓库类,用于操作数据库,创建一个 UserRepository.ts
文件:
// javascriptcn.com 代码示例 import { EntityRepository, Repository } from "typeorm"; import User from "../entities/User"; @EntityRepository(User) export default class UserRepository extends Repository<User> { async createUser(name: string, age: number): Promise<User> { const user = new User(); user.name = name; user.age = age; return this.save(user); } async updateUser(id: number, name: string, age: number): Promise<User> { const user = await this.findOne(id); if (!user) { throw new Error(`User with id ${id} not found`); } user.name = name; user.age = age; return this.save(user); } async deleteUser(id: number): Promise<void> { const user = await this.findOne(id); if (!user) { throw new Error(`User with id ${id} not found`); } await this.remove(user); } async getUsers(): Promise<User[]> { return this.find(); } async getUserById(id: number): Promise<User> { const user = await this.findOne(id); if (!user) { throw new Error(`User with id ${id} not found`); } return user; } }
上面的代码中,我们创建了一个 UserRepository
类,继承自 Typeorm 的 Repository<User>
类。@EntityRepository(User)
表示这是一个针对 User 实体类的仓库类。
在 UserRepository
类中,我们定义了一些方法来操作数据库。createUser
方法用于创建用户,updateUser
方法用于更新用户,deleteUser
方法用于删除用户,getUsers
方法用于获取所有用户,getUserById
方法用于根据 id 获取用户。
最后,我们需要创建一个入口文件,连接数据库并启动应用,创建一个 index.ts
文件:
// javascriptcn.com 代码示例 import { createConnection } from "typeorm"; import config from "./typeorm.config"; import UserRepository from "./repositories/UserRepository"; async function main() { const connection = await createConnection(config); const userRepository = connection.getCustomRepository(UserRepository); const user = await userRepository.createUser("John", 30); console.log(user); const updatedUser = await userRepository.updateUser(user.id, "John Smith", 35); console.log(updatedUser); await userRepository.deleteUser(user.id); const users = await userRepository.getUsers(); console.log(users); const userById = await userRepository.getUserById(1); console.log(userById); await connection.close(); } main().catch((err) => console.error(err));
上面的代码中,我们首先使用 Typeorm 的 createConnection
方法创建一个数据库连接,然后通过 getCustomRepository
方法获取到我们定义的 UserRepository
实例。接着,我们调用 createUser
方法创建一个用户,并打印出来。然后我们调用 updateUser
方法更新用户,再调用 deleteUser
方法删除用户。最后,我们调用 getUsers
方法获取所有用户,并打印出来。最后我们调用 getUserById
方法获取 id 为 1 的用户,并打印出来。最后,我们关闭数据库连接。
总结
Typeorm + TypeScript 可以让我们更加安全、方便地操作数据库。在实践中,我们可以定义实体类和仓库类来管理数据库模型,使用 Typeorm 提供的 API 来操作数据库。Typeorm 还提供了非常丰富的功能,如查询构建器、事务、关系映射等。因此,在 Web 开发中,我们可以使用 Typeorm + TypeScript 来优雅地管理数据库模型。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6558f871d2f5e1655d377a31