ライブラリ、および次のJavaScriptプロジェクトで使用を検討する必要がある理由を簡単に説明します。また、プロジェクト開発者およびメンテナンスワーカーとしてのニーズに基づいて、最高のJavaScriptおよびTypeScript ORMライブラリを評価するお手伝いをします。
次の各ツールを見ていきます。knex.js:sql query builder
オブジェクトリレーショナルマッピングは、データベースクエリの結果をエンティティクラスインスタンスに変換する手法です。エンティティは、データベーステーブルのオブジェクトラッパーにすぎません。データベーステーブル列にマッピングされたプロパティが含まれています。エンティティインスタンスには、CRUD操作を実行し、検証やデータ暗号化などのカスタムロジックを含む他の機能をサポートする方法があります。
小さなプロジェクトを構築している場合は、ORMライブラリをインストールする必要はありません。 SQLステートメントを使用してアプリケーションを駆動するだけで十分です。 ORMは、数百のデータベーステーブルからデータを取得する中型および大規模プロジェクトにとって非常に有益です。この場合、アプリケーションのデータレイヤーを一貫した予測可能な方法で操作および維持できるフレームワークが必要です。
エンティティクラスは、ビジネスルールを実装するために使用されるロジックをカプセル化するように設計されているため、ビジネスアプリケーションのビルディングブロックです。ビジネスルールは、自動化されたプロセスがビジネスポリシーの範囲内でのみ実行されることを保証するために定義されます。ビジネスルールの例は次のとおりです
顧客割引
ビジネスルールでは、通常、複数のSQLステートメントのバッチ実行が必要です。単一のSQLステートメントが失敗した場合、データベースを一貫性のない状態にしておくことがあります。ほとんどのORMライブラリは、トランザクションと呼ばれる機能をサポートしており、このようなイベントが発生するのを防ぎます。このトランザクションコンテキストでSQLステートメントが実行されない場合、そのバッチで正常に実行された他のすべてのSQLステートメントは、ロールバックと呼ばれる操作によって非表示になります。 したがって、ORMライブラリを使用してデータレイヤーを構築すると、データベースが常に一貫していることを確認することができます。 ORMライブラリには通常、次のようなより基本的な関数が含まれています。
初期設定と構成
評価を開始する前に、まずknex.jsを見てみましょう。knex.jsは、ここにリストされている多くのORMライブラリと統合された人気のSQLクエリビルダーです。 KNEX.JSは非常に柔軟であり、一般に、クエリビルダーの独自の組み込み実装を持つ一部のORMライブラリよりも優れています。 knex.jsをその基礎として使用するORMライブラリを選択する際の利点と考えてください。
knex.js:sql query builder
これは、クエリを形成するためにリンクしてリンクできる一連の関数を提供する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方言からコードを抽象化するのに役立ち、切り替えを容易にします。
コールバックとプロミスインターフェイス
これは基本的なクエリの例です
<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>
<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を使用していることに注意してください。これらには次のものが含まれます
javascript ormライブラリ
データアクセスレイヤーでは、2つの一般的なアーキテクチャパターンが使用されます。
データマッパー
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>
今すぐ注意を払い始めましょう。
<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月
以下は、セットアップコードと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>
<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>
残りの部分は、入力テキストに似ています。同じ方法で擬似原産性を実行できます。 スペースの制限により、この場所は拡張されません。 画像形式は同じままであることに注意してください。
以上が9 2024年のベストJavaScriptとTypeScript ormsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。