TypeORM
歴史
mysqlがある mysql2が
パターンスタイルサポート
スタイルとしては、Active RecordとData Mapperの2つのパターンをサポートしている。
version
0.2系が現在主流であるが0.3系が最新(2022/10/09現在)
キャッシュ
デフォルトのキャッシュの有効期間は1000ms(1秒)
これは、クエリ ビルダー コードが呼び出されてから1秒後にキャッシュが無効になることを意味します。実際には、これは、ユーザーが3秒以内にユーザー ページを150回開いた場合、この期間中に実行されるクエリは3つだけであることを意味します。1秒間のキャッシュ ウィンドウの間に挿入されたユーザーは、ユーザーに返されません。
デフォルトでは、TypeORMは別のテーブルを参照しquery-result-cache、そこにすべてのクエリと結果を格納します
0.3系 参考
参考URL
参考URL
参考URL
参考URL
参考URL
これが一番参考になるかも
参考URL
参考URL
TypeORM & Express & Dockerで環境構築
TypeORM をサクッと試せる Docker 環境を TypeORM CLI を使って構築する方法
TypeORM CLI option
-
create(空のマイグレーションファイル作成)
typeorm migration:create src/migration/UserMigration
1655392769030-UserMigration.tsのように空のマイグレーションファイルが作られる。 -
generate(entityからのマイグレーションファイル作成) ※0.3からDB接続設定ファイルがtsファイルの場合は、typeormではなく同時にコンパイルも行う
typeorm-ts-node-commonjs
を使う必要npx typeorm-ts-node-commonjs migration:generate src/migration/UserMigration -d src/data-source.ts
-
run(マイグレーション実行)
npx typeorm-ts-node-commonjs migration:run -d src/data-source.ts
-
revert(マイグレーションロールバック)
npx typeorm-ts-node-commonjs migration:revert -d src/data-source.ts
Find option 一覧
const user = connection.getRepository(User).find({
where: [
{ firstName: "Timber", lastName: "Saw" },
]
});
const user = connection.getRepository(User).find({
where: [
{ firstName: "Timber", lastName: "Saw" },
{ firstName: "Stan", lastName: "Lee" }
]
});
entity
参考URL
参考URL(詳しい)
entityはDBのテーブルと一対一で構成する。
※実際はClassで作成するため関連するmethodなども記載していいかは議論が生じる
Entityファイル
@Entity
をつけたものがテーブル対象になる。
データベースの列の型は、使用したプロパティの型から推測
データ型 サポートされている列の型
データベースの列の型は、使用したプロパティの型から推測されます。 ただし、列の型をデコレータに明示的に指定することで、データベースがサポートする任意の列の型を使用できる。
サポートしている関係
TypeORMはエンティティ間のいくつかの種類の関係をサポートします。
1対1 1対多、多対1 多対多
サポートしている関数についての関係
関数
表5で説明されているように、これらのそれぞれに対してデコレータと関数がtypeormで提供されています。 説明
OneToOne エンティティ間の1対1の関係を指定する
JoinColumn 1対1リレーションの所有側を指定する
OneToMany エンティティ間の1対多の関係を指定する
ManyToOne エンティティ間の多対1の関係を指定する
ManyToMany エンティティ間の多対多の関係を指定する
JoinTable 多対多関係の所有側を指定する
1対1
@OneToOne(() => )
参照される側。サッカーチーム から コーチを参照(コーチに@OneToOne()を付与) @JOinColumnは必須
@OneToMany()
@OneToMany(
() => TicketOptionItem,
(ticketOptionItem) => ticketOptionItem.ticket
)
public ticketOptionItems?: TicketOptionItem[];
上を見ればわかるだろう。ひとつのチケットに対して複数のオプションがある。S
Tips
デコレータオプション
- cascade 参考URL
名前的にDB側のテーブル設定かと思いきや違うので、設定を変更してもmigrationは発生しない。 親Entityを各種更新した際、いっしょに子も更新するかどうか。取得時には影響しない
TypeORMのEager relationsとLazy relationsについて
TypeORMでは、データベースからEntityを取得するときに関連しているEntityを2種類の方法で取得できる。
Eager relations
Entityと関連Entityを同じタイミングで読み込む。
Lazy relations
Promiseを使って任意のタイミングで遅延して読み込む。
オプションで {lazy: true}
を設定しなくても型として Promise
を指定するとTypeORMは自動的に Lazy relations
として扱います。