概要
次何書こうかな〜とか思ったり、連載形式やめようかな〜とか思ったりしましたが、結局連載形式にしちゃいました。
今回はTypeORMにちゃんと入門しようと思います。
公式
TypeORMについて
TypeORMは、NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、NativeScript、Expo、およびElectronプラットフォームで実行できるORMです。
TypeScript、およびJavaScript (ES5/6/7/8) で使用できます。
TypeORMは、アクティブレコードパターンと、データパッマーパターンの両方をサポートします。
高品質で、疎結合で、スケーラブルで保守可能なアプリケーションを最も生産的な方法で作成できます。
(TypeORMは、Hibernate、Doctrine、Entity FrameworkなどのORMに影響を受けているらしい)
クイックスタート
TypeORMを始めてみましょう。
以下でクイックスタートできます。
$ npx typeorm init --name MyProject --database mysql
コマンドを実行すると、以下のファイルが作成されています。
src/ entity/ User.ts migration/ data-source.ts index.ts .gitignore package-lock.json package.json README.md tsconfig.json
mysqlコンテナを作成するため、docker-compose.ymlを作成します。
docker-compose.yml
version: '3.9' services: mysql: image: mysql:latest restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test MYSQL_USER: test MYSQL_PASSWORD: test
コンテナを起動します。
$ docker-compose up -d
データベース接続構成オプションは、以下にあります。
src/data-source.ts
import "reflect-metadata"; import { DataSource } from "typeorm"; import { User } from "./entity/User"; export const AppDataSource = new DataSource({ type: "mysql", host: "localhost", port: 3306, username: "test", password: "test", database: "test", synchronize: true, logging: false, entities: [User], migrations: [], subscribers: [], });
以下のコマンドを実行してアプリケーションを実行できます。
$ npm start
(以下エラーが出て接続できませんでした。)
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
ライブラリを変更するといい模様。
$ npm uninstall mysql $ npm install mysql2
実行結果
$ npm start > MyProject@0.0.1 start > ts-node src/index.ts query: SELECT VERSION() AS `version` query: START TRANSACTION query: SELECT DATABASE() AS `db_name` query: SELECT `TABLE_SCHEMA`, `TABLE_NAME` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'user' query: SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'typeorm_metadata' query: CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT, `firstName` varchar(255) NOT NULL, `lastName` varchar(255) NOT NULL, `age` int NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB query: COMMIT Inserting a new user into the database... query: START TRANSACTION query: INSERT INTO `user`(`id`, `firstName`, `lastName`, `age`) VALUES (DEFAULT, ?, ?, ?) -- PARAMETERS: ["Timber","Saw",25] query: COMMIT Saved a new user with id: 1 Loading users from the database... query: SELECT `User`.`id` AS `User_id`, `User`.`firstName` AS `User_firstName`, `User`.`lastName` AS `User_lastName`, `User`.`age` AS `User_age` FROM `user` `User` Loaded users: [ User { id: 1, firstName: 'Timber', lastName: 'Saw', age: 25 } ] Here you can setup and run express / fastify / any other framework.
express、fastify、または他のフレームワークのセットアップもできると書いてあります。
まとめ
ここまでで、
- TypeORMについて
- クイックスタート
を学びました。
次回もクイックスタートを掘り下げます。
コード
今回のコードは、以下に格納しました。