ホームページ > ウェブフロントエンド > jsチュートリアル > 9 2024年のベストJavaScriptとTypeScript orms

9 2024年のベストJavaScriptとTypeScript orms

Joseph Gordon-Levitt
リリース: 2025-02-09 12:55:08
オリジナル
829 人が閲覧しました

9 Best JavaScript and TypeScript ORMs for 2024

この記事では、オブジェクトリレーショナルマッピング(ORM)、orm

ライブラリ、および次のJavaScriptプロジェクトで使用を検討する必要がある理由を簡単に説明します。また、プロジェクト開発者およびメンテナンスワーカーとしてのニーズに基づいて、最高のJavaScriptおよびTypeScript ORMライブラリを評価するお手伝いをします。

次の各ツールを見ていきます。

knex.js:sql query builder
  • 続編
  • 本棚
  • ウォーターライン
  • deploction.js
  • mongoose
  • typegoose
  • typeorm
  • mikroom
  • prisma
  • オブジェクトリレーションシップマップ

オブジェクトリレーショナルマッピングは複雑に見えるかもしれませんが、その目的はプログラマとしての生活を楽にすることです。データベースからデータを取得するには、クエリを記述する必要があります。しかし、これはあなたがSQLを学ばなければならないことを意味しますか?いいえ、オブジェクトリレーショナルマッピングを使用すると、選択した言語でクエリを書くことができます。

オブジェクトリレーショナルマッピングは、データベースクエリの結果をエンティティクラスインスタンスに変換する手法です。エンティティは、データベーステーブルのオブジェクトラッパーにすぎません。データベーステーブル列にマッピングされたプロパティが含まれています。エンティティインスタンスには、CRUD操作を実行し、検証やデータ暗号化などのカスタムロジックを含む他の機能をサポートする方法があります。

小さなプロジェクトを構築している場合は、ORMライブラリをインストールする必要はありません。 SQLステートメントを使用してアプリケーションを駆動するだけで十分です。 ORMは、数百のデータベーステーブルからデータを取得する中型および大規模プロジェクトにとって非常に有益です。この場合、アプリケーションのデータレイヤーを一貫した予測可能な方法で操作および維持できるフレームワークが必要です。

エンティティクラスは、ビジネスルールを実装するために使用されるロジックをカプセル化するように設計されているため、ビジネスアプリケーションのビルディングブロックです。ビジネスルールは、自動化されたプロセスがビジネスポリシーの範囲内でのみ実行されることを保証するために定義されます。ビジネスルールの例は次のとおりです

顧客割引

    ローンの承認
  • 販売委員会
  • 配送と税の計算
  • ormライブラリ
オブジェクトリレーショナルマッピングは通常、ライブラリの助けを借りて行われます。 ORMという用語は、ほとんどの場合、実際のORMライブラリ(オブジェクトの関係

マッパー

)を指します。これは、オブジェクト関係の作業をマッピングします。

ビジネスルールでは、通常、複数のSQLステートメントのバッチ実行が必要です。単一のSQLステートメントが失敗した場合、データベースを一貫性のない状態にしておくことがあります。ほとんどのORMライブラリは、トランザクションと呼ばれる機能をサポートしており、このようなイベントが発生するのを防ぎます。このトランザクションコンテキストでSQLステートメントが実行されない場合、そのバッチで正常に実行された他のすべてのSQLステートメントは、ロールバックと呼ばれる操作によって非表示になります。 したがって、ORMライブラリを使用してデータレイヤーを構築すると、データベースが常に一貫していることを確認することができます。 ORMライブラリには通常、次のようなより基本的な関数が含まれています。

  • クエリビルダー
  • 移行スクリプト
  • ボイラープレートコードを生成するためのCLIツール
  • テストデータを使用した事前充填テーブルの
  • sow関数
  • この記事では、各ORMライブラリが次のことをどのように行うかについてのコードのスニペットを提供します。

初期設定と構成

    基本的なCRUD操作
  • 高度なクエリ操作
  • 起動日、ユーザー数、ドキュメントリンク、利用可能なサポートチャネルなどの重要な情報も含まれています。また、意思決定を行う際に慎重に重量を量る必要があるというクエリのパフォーマンス、ライブラリのメンテナンス、および建築哲学に関連する最も重要な問題についても説明します。
最初から最新のものまでの開始日までにリストを並べ替えました。主なサポートされた言語に従って、リストを2つの部分に分割しました:JavaScriptとTypeScript。

評価を開始する前に、まずknex.jsを見てみましょう。knex.jsは、ここにリストされている多くのORMライブラリと統合された人気のSQLクエリビルダーです。 KNEX.JSは非常に柔軟であり、一般に、クエリビルダーの独自の組み込み実装を持つ一部のORMライブラリよりも優れています。 knex.jsをその基礎として使用するORMライブラリを選択する際の利点と考えてください。

knex.js:sql query builder

開始:2012年12月

    ウェブサイト
  • github:158.6kユーザー
  • データベース:Postgres、MSSQL、MySQL、Mariadb、SQLite3、Oracle、およびAmazon Redshift
  • knex.jsは現在、node.jsおよびブラウザーで実行できる最も成熟したJavaScript SQLクエリビルダーです(Webpackまたはbrowserify経由)。手動で記述されたSQLステートメントと同じ高性能SQLクエリを生成できます。
では、クエリビルダーとは何ですか?

これは、クエリを形成するためにリンクしてリンクできる一連の関数を提供するAPIにすぎません。例は次のとおりです。

これは質問を請います、なぜ元のSQLステートメントを書く代わりにクエリビルダーを使用する必要があるのですか? 4つの理由を説明します:

<code>knex({ a: 'table', b: 'table' })
  .select({
    aTitle: 'a.title',
    bTitle: 'b.title'
  })
  .whereRaw('?? = ??', ['a.column_1', 'b.column_2'])

SQL 输出:
select `a`.`title` as `aTitle`, `b`.`title` as `bTitle` from `table`
as `a`, `table` as `b` where `a`.`column_1` = `b`.`column_2`
</code>
ログイン後にコピー
ログイン後にコピー

データベースのSQL方言からコードを抽象化するのに役立ち、切り替えを容易にします。

    アプリケーションに対するSQLインジェクション攻撃の可能性を排除または大幅に減らします。
  • 動的条件のクエリを簡単に構築できます。
  • データベース開発操作を実行するための他の機能やCLIツールがあります。
  • これらの関数には次のものが含まれます
接続プール

コールバックとプロミスインターフェイス
  • ストリームインターフェイス
  • トランザクションサポート
  • モードサポート
  • 移行
  • 種子を播種
  • アプリケーションにインストールするには、knex.jsパッケージと使用しているデータベースのドライバーをインストールする必要があります。
  • これはセットアップコードの例です。

これは基本的なクエリの例です
<code>$ npm install knex --save

# 然后添加以下一个(添加 --save)标志:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install mssql
</code>
ログイン後にコピー
ログイン後にコピー

生のSQLステートメントもサポートしています。複雑なクエリの例は次のとおりです

<code>const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

knex.schema.createTable('users', function (table) {
  table.increments();
  table.string('name');
  table.timestamps();
})

输出:
create table `users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255),
`created_at` datetime, `updated_at` datetime)
</code>
ログイン後にコピー
ログイン後にコピー
knex.jsはタイプスクリプトもサポートしています。これは、次のようなコードを書くことができるため、素晴らしいことです。
<code>knex({ a: 'table', b: 'table' })
  .select({
    aTitle: 'a.title',
    bTitle: 'b.title'
  })
  .whereRaw('?? = ??', ['a.column_1', 'b.column_2'])

SQL 输出:
select `a`.`title` as `aTitle`, `b`.`title` as `bTitle` from `table`
as `a`, `table` as `b` where `a`.`column_1` = `b`.`column_2`
</code>
ログイン後にコピー
ログイン後にコピー

上記のタイプスクリプトの例では、knex.jsはほぼORMとして機能します。ただし、エンティティオブジェクトインスタンスは作成されません。代わりに、インターフェイス定義を使用して、タイプセーフプロパティを備えたJavaScriptオブジェクトを作成します。

この記事にリストされているORMライブラリの多くは、バックグラウンドでknex.jsを使用していることに注意してください。これらには次のものが含まれます

    本棚
  • deploction.js
  • mikroom
ormライブラリは通常、knex.jsの上に追加機能を提供します。次のセクションでそれらを見てみましょう。

javascript ormライブラリ

このカテゴリでは、ここにリストされているすべてのライブラリはjavascriptに記載されており、node.jsで直接実行できます。タイプスクリプトサポートは、組み込みタイプまたは @タイプ/ノード定義パッケージを介して提供されます。 TypeScriptプロジェクトの最大のサポートが必要な場合は、TypeScript ORMライブラリセクションにスキップする必要があります。

データアクセスレイヤーでは、2つの一般的なアーキテクチャパターンが使用されます。

データマッパー

    アクティビティレコード
  • データマッパーパターンを使用すると、エンティティクラスは純粋で、プロパティのみが含まれています。 CRUD運用とビジネスルールは、リポジトリと呼ばれるコンテナに実装されています。例は次のとおりです。

CRUDオペレーションとビジネスルールのロジックは、アクティブレコードモードを使用してエンティティクラスで実装されています。上記を説明する同様の例があります:

<code>$ npm install knex --save

# 然后添加以下一个(添加 --save)标志:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install mssql
</code>
ログイン後にコピー
ログイン後にコピー
いずれかのモードを使用することには、その利点と短所があります。これらのパターンは、2003年のBook Enterprise Application Architecture PatternsでMartin Fowlerによって命名されました。このトピックについて詳しく知りたい場合は、この本をチェックしてください。この記事にリストされているORMライブラリのほとんどは、一方または両方のモードをサポートしています。

今すぐ注意を払い始めましょう。
<code>const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

knex.schema.createTable('users', function (table) {
  table.increments();
  table.string('name');
  table.timestamps();
})

输出:
create table `users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255),
`created_at` datetime, `updated_at` datetime)
</code>
ログイン後にコピー
ログイン後にコピー

続編

開始:2010年7月

ウェブサイト
  • github:726kユーザー
  • slack
  • データベース:Postgres、mysql、mariadb、sqlite、およびmicrosoft sql server
  • Sequelizeは、非常に成熟した人気のあるnode.js ormライブラリで、よく説明されたコードの例を備えた優れたドキュメントを備えています。以前のライブラリで言及したデータレイヤー機能の多くをサポートしています。 Bookshelfとは異なり、knex.jsと同様に演奏する独自のクエリビルダーがあります。
  • ライブラリのインストールは非常にシンプルで、データベースドライバーも非常に直接的です:

以下は、セットアップコードとCRUDおよび基本的なクエリステートメントの例です。

以下は、複雑なクエリの書き方の例です。
<code>knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')

输出:
select `id` from `users` where `first_name` = 'Test' and `last_name` = 'User'
</code>
ログイン後にコピー

最後の複雑なクエリの例では、SQL出力は次のとおりです。

<code>const subcolumn = knex.raw('select avg(salary) from employee where dept_no = e.dept_no')
.wrap('(', ') avg_sal_dept');

knex.select('e.lastname', 'e.salary', subcolumn)
.from('employee as e')
.whereRaw('dept_no = e.dept_no')

输出:
select `e`.`lastname`, `e`.`salary`, (select avg(salary) from employee where dept_no = e.dept_no)
avg_sal_dept from `employee` as `e` where dept_no = e.dept_no
</code>
ログイン後にコピー
Sequelizeは、生のSQLステートメントをサポートしています。これにより、開発者は複雑で高性能のSQLステートメントを作成する柔軟性を提供します。結果は、オブジェクトエンティティインスタンスにマッピングすることもできます。例は次のとおりです。

<code>import { Knex, knex } from 'knex'

interface User {
  id: number;
  age: number;
  name: string;
  active: boolean;
  departmentId: number;
}

const config: Knex.Config = {
  client: 'sqlite3',
  connection: {
    filename: './data.db',
  },
};

const knexInstance = knex(config);

try {
  const users = await knex<user>('users').select('id', 'age');
} catch (err) {
  // 错误处理
}
</user></code>
ログイン後にコピー
たとえの主な欠点は、開発が遅くなり、問題が積み重なって解決されないことです。幸いなことに、あるメンテナーは、ライブラリが2021年からそれに値する注目を集めると発表しました。この記事のすべてのORMライブラリプロジェクトはオープンソースであり、開発者の助けが必要であることに注意してください。

残りの部分は、入力テキストに似ています。同じ方法で擬似原産性を実行できます。 スペースの制限により、この場所は拡張されません。 画像形式は同じままであることに注意してください。

以上が9 2024年のベストJavaScriptとTypeScript ormsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート