基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
使用 TypeORM 连接 OceanBase 数据库
更新时间:2026-04-09 14:12:04
功能适用性
TypeORM 适用于 OceanBase 数据库 MySQL 模式。
TypeORM 是一个支持 TypeScript 和 JavaScript 的 ORM 框架,支持多种数据库系统。本文将介绍如何使用 TypeORM 连接 OceanBase 数据库的 MySQL 模式。
前提条件
- 已安装 Node.js 14.0.0 或更高版本
- 已安装 npm 或 yarn 包管理器
- 已部署 OceanBase 数据库并且创建了 MySQL 模式租户
- TypeScript 环境(推荐)
操作步骤
- 检查 Node.js 和 npm 版本
- 安装必要的依赖
- 配置项目
- 数据操作示例
- 运行示例
步骤一:检查 Node.js 和 npm 版本
打开终端,运行以下命令检查 Node.js 和 npm 的版本:
node -v
npm -v
步骤二:安装必要的依赖
创建项目目录并初始化:
mkdir typeorm-oceanbase-demo cd typeorm-oceanbase-demo npm init -y安装 TypeORM 和 MySQL2 驱动:
npm install typeorm mysql2 reflect-metadata # 如果使用 TypeScript npm install --save-dev typescript @types/node # 初始化 TypeScript 配置 npx tsc --init更新
tsconfig.json以支持装饰器:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "es6",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}
步骤三:配置项目
创建项目目录结构:
mkdir -p src/entity src/migration src/subscriber创建 TypeORM 配置文件
ormconfig.json:{ "type": "mysql", "host": "oceanbase-host", "port": 2881, "username": "your_username", "password": "your_password", "database": "your_database", "synchronize": true, "logging": false, "entities": ["src/entity/**/*.ts"], "migrations": ["src/migration/**/*.ts"], "subscribers": ["src/subscriber/**/*.ts"], "cli": { "entitiesDir": "src/entity", "migrationsDir": "src/migration", "subscribersDir": "src/subscriber" } }
注意
- 将
host、port、username、password和database替换为你的 OceanBase 数据库连接信息 - 如果使用 SSL 连接,需要添加
ssl: { rejectUnauthorized: false }配置 - 开发时可以将
synchronize设为true,但在生产环境建议使用迁移(migrations)来管理数据库结构变更 - 建议使用
.env文件和环境变量来存储敏感信息
步骤四:数据操作示例
1. 定义实体
创建 src/entity/User.ts 文件:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id?: number;
@Column()
firstName: string = "";
@Column()
lastName: string = "";
@Column({ unique: true })
email: string = "";
@Column()
age: number = 0;
}
2. 创建数据库连接和操作示例
创建 src/index.ts 文件:
import 'reflect-metadata';
import { createConnection } from 'typeorm';
import { User } from './entity/User';
async function main() {
// 1. Create database connection
const connection = await createConnection();
console.log('Database connection established');
// 2. 创建新用户
const user = new User();
user.firstName = "张";
user.lastName = "三";
user.email = "zhangsan@example.com";
user.age = 25;
await connection.manager.save(user);
console.log('用户已保存,用户ID: ', user.id);
// 3. 查询所有用户
const users = await connection.manager.find(User);
console.log('所有用户: ', users);
// 4. 按条件查询
const specificUser = await connection.manager.findOne(User, {
where: {
firstName: "张",
lastName: "三"
}
});
console.log('按条件查询: ', specificUser);
// 5. 使用 QueryBuilder 进行复杂查询
const userRepository = connection.getRepository(User);
const queryBuilderUsers = await userRepository
.createQueryBuilder("user")
.where("user.age > :age", { age: 18 })
.orderBy("user.age", "DESC")
.getMany();
console.log('复杂查询: ', queryBuilderUsers);
// 6. 更新记录
await connection
.createQueryBuilder()
.update(User)
.set({ firstName: "李", lastName: "四" })
.where("id = :id", { id: 1 })
.execute();
const updateUsers = await connection.manager.find(User);
console.log('更新记录: ', updateUsers);
// 7. 删除记录
await connection
.createQueryBuilder()
.delete()
.from(User)
.where("id = :id", { id: 1 })
.execute();
const deleteUsers = await connection.manager.find(User);
console.log('删除记录: ', deleteUsers);
}
main().catch(error => {
console.error('Error occurred:', error);
process.exit(1);
});
步骤五:运行示例
确保数据库已启动并可访问
编译 TypeScript 代码:
npx tsc运行示例:
node src/index.js
说明
在实际项目中,请确保:
- 密码必须经过加密处理(如使用 bcrypt)
- 处理可能出现的错误情况
- 使用环境变量管理数据库连接信息
- 添加适当的输入验证