TypeORMは、TypeScriptとJavaScriptをサポートするORMフレームワークであり、さまざまなデータベースシステムに対応しています。本記事では、TypeORMを使用してOceanBaseデータベースのMySQLモードに接続する方法について説明します。
前提条件
- Node.js 14.0.0以降のバージョンがインストール済みであること。
- npmまたはyarnパッケージマネージャーがインストールされていること。
- OceanBaseデータベースがデプロイ済みで、MySQLテナントが作成されていること。
- TypeScript環境(推奨)。
手順
- Node.jsとnpmのバージョンを確認する
- 必要な依存関係をインストールする
- プロジェクトを設定する
- データ操作の例
- 実行例
ステップ1:Node.jsとnpmのバージョンを確認する
ターミナルを開き、以下のコマンドを実行してNode.jsとnpmのバージョンを確認します。
node -v
npm -v
ステップ2:必要な依存関係のインストール
プロジェクトディレクトリを作成し、初期化します:
mkdir typeorm-oceanbase-demo cd typeorm-oceanbase-demo npm init -yTypeORMとMySQL2ドライバーをインストールします:
npm install typeorm mysql2 reflect-metadata # TypeScriptを使用する場合 npm install --save-dev typescript @types/node # TypeScript設定の初期化 npx tsc --inittsconfig.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"]
}
ステップ3:プロジェクトの設定
プロジェクトディレクトリ構造を作成します:
mkdir -p src/entity src/migration src/subscriberTypeORM設定ファイル
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ファイルや環境変数を使用して格納することを推奨します。
ステップ4:データ操作の例
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);
});
ステップ5:サンプルの実行
データベースが起動済みでアクセス可能であることを確認します。
TypeScriptコードをコンパイルします:
npx tscサンプルを実行します:
node src/index.js
説明
実際のプロジェクトでは、以下の点を確認してください:
- パスワードは必ず暗号化処理を施してください(bcryptなどの使用を推奨します)。
- 発生する可能性のあるエラー状況を処理してください。
- 環境変数を使用してデータベース接続情報を管理してください。
- 適切な入力検証を追加してください。