そもそもORMとは
ORM(Object-Relational Mapping)は、オブジェクト指向パラダイムを使用してデータベースからデータを照会および操作するのに役立つ手法です。
利点
- データモデルを1か所に記述することになるため、コードの更新、保守、再利用が簡単になります。
- MVCコードの記述を強制するので、コードがよりクリーンになります。
- SQLクエリを作成する必要はありません。
- データベースレベルの変更を頻繁に行う必要はありません。
- ほとんどの作業は自動化されています。
欠点
- 複雑なクエリでのパフォーマンスの問題。
- 慣れるまでは学習コストがかかります。
typescriptで使用できるORMライブラリ
1. Sequelize
- よく知られているPromiseベース(promiseをサポートしてる)のNode.js ORM
- MySQL、MariaDB、SQLite、Microsoft SQLServer、Postgresで使用できます。
- Sequelizeは機能が多く人気があります。
- 他のORMに比べてドキュメントも豊富
- https://github.com/sequelize/sequelize
example
const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
class User extends Model {}
User.init({
username: DataTypes.STRING,
birthday: DataTypes.DATE
}, { sequelize, modelName: 'user' });
(async () => {
await sequelize.sync();
const jane = await User.create({
username: 'janedoe',
birthday: new Date(1980, 6, 20)
});
console.log(jane.toJSON());
})();
2. TypeORM
- 2016年頃に導入され、その人気は過去2、3年で急速に高まっています。
- この人気の背後にある主な理由は、TypeORMがTypeScriptとJavaScript(ES5、ES6、ES7、ES8)を非常にサポートしていることです。
- TypeORMは、最新のJavaScript機能を引き続きサポートし、開発者があらゆる種類のテクノロジーを使用できるようにするための新機能を提供することが目標であると述べています。
- MySQL、MariaDB、Postgres、CockroachDB、SQLite、Microsoft SQL Server、Oracle、SAP Hana、sql.js、MongoDBなどの幅広いデータベース管理システムもサポートしています。
- 他のJavaScriptORMと比較したTypeORMのもう1つの特徴は、アクティブレコードパターンとデータマッパーパターンの両方をサポートすることです。これにより、開発者は高品質で疎結合のスケーラブルなアプリケーションでコードを記述できます。
- 実装していてまだまだ情報量が少ないのがネックだと感じますが、直感的で書きやすいです。
- テーブル単位でコメントがつけられないのが地味に気になる。
example
import {Entity, PrimaryGeneratedColumn, Column, BaseEntity} from "typeorm";
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
3. Mongoose
- MongoDB用に特別に設計されたオブジェクトモデリングツール(MongoDB:ドキュメントベースのNoSQLデータベースシステム)
- https://mongoosejs.com/docs/documents.html
4. Bookshelf
- Knex SQLクエリビルダと、それは、PostgreSQL、MySQLの、とSQLite3のデータベース管理システムをサポートしています。
- JavaScriptでデータベースにクエリを実行し、これらのオブジェクト間の関係を形成する際の一般的なタスク用の単純なライブラリを提供することです。
- https://bookshelfjs.org/
5. Objection.js
- PostgreSQL、MySQL、およびSQLite3データベース管理システムをサポートしています。
- 公式のtypescriptサポート。
- オプションのJSONスキーマ検証。
- SQLの機能の見やすさ。
- トランザクションの使いやすさ。
- データベーススキーマの自動作成とモデル定義からの移行。・・・エトセトラエトセトラ・・・
- https://github.com/Vincit/objection.js/
引き続き追記していきます!
参考
https://docs.google.com/spreadsheets/d/1mJ3uffp9TqrCvxHbnaEs_q8D5CorNx6R_DXq9cI8rU4/edit#gid=691713550