目次
オブジェクトリレーショナルマッピングは複雑に見えるかもしれませんが、その目的はプログラマとしての生活を楽にすることです。データベースからデータを取得するには、クエリを記述する必要があります。しかし、これはあなたがSQLを学ばなければならないことを意味しますか?いいえ、オブジェクトリレーショナルマッピングを使用すると、選択した言語でクエリを書くことができます。
マッパー
開始:2012年12月
ホームページ ウェブフロントエンド jsチュートリアル 9 2024年のベストJavaScriptとTypeScript orms

9 2024年のベストJavaScriptとTypeScript orms

Feb 09, 2025 pm 12:55 PM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptエンジン:実装の比較 JavaScriptエンジン:実装の比較 Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへ:すべてがどのように機能するか C/CからJavaScriptへ:すべてがどのように機能するか Apr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

See all articles