TypeORM实战总结 从踩坑到高效使用的关键技术分享
先看效果,再看代码
最近在项目里用了TypeORM,感觉挺不错的。TypeORM是一个ORM(对象关系映射)库,支持多种数据库,比如MySQL、PostgreSQL等。它的好处是能把数据库操作变得简单,直接用JavaScript/TypeScript来写SQL语句。废话不多说,直接上代码。
核心代码就这几行
假设我们要创建一个简单的用户表,包含id、name和email字段。首先,安装TypeORM:
npm install typeorm reflect-metadata
然后配置TypeORM连接数据库。我在项目里用的是MySQL,配置文件ormconfig.json如下:
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "test",
"synchronize": true,
"logging": false,
"entities": ["src/entity/**/*.ts"],
"migrations": ["src/migration/**/*.ts"],
"subscribers": ["src/subscriber/**/*.ts"]
}
接下来是实体类User.ts:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
最后,我们可以在服务里使用这个实体类进行数据库操作。比如插入一个新用户:
import { createConnection, getRepository } from 'typeorm';
import { User } from './entity/User';
async function createUser() {
const connection = await createConnection();
const userRepository = getRepository(User);
const user = new User();
user.name = 'John Doe';
user.email = 'john.doe@example.com';
await userRepository.save(user);
console.log('User has been saved');
}
createUser().catch(error => console.log(error));
这个场景最好用
TypeORM特别适合那些需要频繁与数据库交互的项目。比如后台管理系统,或者需要存储大量用户数据的应用。它的优势在于可以把复杂的SQL语句封装成简单的方法调用,大大减少了出错的概率。
踩坑提醒:这三点一定注意
用TypeORM的时候,我踩过几个坑,这里给大家提个醒:
- 同步模式的问题: 配置文件里的
synchronize选项默认是false,如果你把它设置为true,每次运行应用时都会自动同步数据库结构。虽然方便,但可能会导致生产环境的数据丢失。建议只在开发环境使用,生产环境还是手动管理数据库迁移。 - 类型转换问题: TypeORM会自动处理类型转换,但有时候会出现一些奇怪的问题。比如日期类型,如果数据库里是
datetime,而你的实体类里是string,可能会导致时间格式不一致。建议尽量保持类型一致。 - 性能问题: 大量数据查询时,TypeORM的性能可能不如原生SQL。如果你的应用对性能要求很高,建议结合原生SQL一起使用。TypeORM也支持自定义查询,可以用
queryBuilder来写复杂查询。
高级技巧:批量插入和更新
有时候我们需要批量插入或更新数据,TypeORM提供了几种方法来实现这一点。比如批量插入:
import { createConnection, getRepository } from 'typeorm';
import { User } from './entity/User';
async function bulkInsertUsers() {
const connection = await createConnection();
const userRepository = getRepository(User);
const users = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bob@example.com' },
{ name: 'Charlie', email: 'charlie@example.com' }
];
await userRepository.save(users);
console.log('Users have been saved');
}
bulkInsertUsers().catch(error => console.log(error));
批量更新稍微复杂一点,可以用update方法结合条件来实现:
import { createConnection, getRepository } from 'typeorm';
import { User } from './entity/User';
async function bulkUpdateUsers() {
const connection = await createConnection();
const userRepository = getRepository(User);
const usersToUpdate = [
{ id: 1, name: 'Alice Smith' },
{ id: 2, name: 'Bob Johnson' },
{ id: 3, name: 'Charlie Brown' }
];
for (const user of usersToUpdate) {
await userRepository.update(user.id, { name: user.name });
}
console.log('Users have been updated');
}
bulkUpdateUsers().catch(error => console.log(error));
结尾:拓展用法还有很多
以上是我个人对TypeORM的一些实战经验分享,希望能帮到你。TypeORM的功能远不止这些,还有很多高级用法,比如事务管理、监听器、分页查询等等。后续我会继续分享这类博客,希望对你有帮助。
如果有更好的实现方式或者遇到什么问题,欢迎评论区交流。
本文章不代表JZTHEME立场,仅为作者个人观点 / 研究心得 / 经验分享,旨在交流探讨,供读者参考。
登录/注册
UX-篷蔚
Lv1
作者的分享让我学会了如何更好地平衡代码的可读性和性能,提升了代码质量。
点赞
6
2026-02-03 17:25
