9 Orms JavaScript dan TypeScript terbaik untuk 2024
perpustakaan , dan mengapa anda harus mempertimbangkan menggunakannya dalam projek JavaScript seterusnya. Kami juga akan membantu anda menilai perpustakaan JavaScript dan TypeScript terbaik berdasarkan keperluan anda sebagai pemaju projek dan pekerja penyelenggaraan.
kita akan melihat setiap alat berikut:
- knex.js: SQL Query Builder
- Sequelize
- Bookshelf
- Waterline
- objection.js
- Mongoose
- typegoose
- TypeOrM
- Mikroorm
- prisma
- Peta Hubungan Objek
Pemetaan relasi objek mungkin kelihatan rumit, tetapi tujuannya adalah untuk menjadikan hidup anda lebih mudah sebagai pengaturcara. Untuk mendapatkan data dari pangkalan data, anda perlu menulis pertanyaan. Tetapi adakah ini bermakna anda perlu belajar SQL? Tidak, pemetaan objek-hubungan membolehkan anda menulis pertanyaan dalam bahasa pilihan anda.
Pemetaan Relasi Objek adalah teknik yang menukarkan hasil pertanyaan pangkalan data ke dalam contoh kelas entiti. Entiti hanya pembungkus objek untuk jadual pangkalan data. Ia mengandungi sifat yang dipetakan ke lajur jadual pangkalan data. Contoh entiti mempunyai kaedah untuk melaksanakan operasi CRUD dan menyokong ciri -ciri lain yang termasuk logik tersuai seperti pengesahan dan penyulitan data.
Jika anda membina projek kecil, anda tidak perlu memasang perpustakaan ORM. Sudah cukup untuk menggunakan penyataan SQL untuk memandu permohonan anda. ORM sangat bermanfaat untuk projek sederhana dan besar yang mendapat data dari beratus -ratus jadual pangkalan data. Dalam kes ini, anda memerlukan rangka kerja yang membolehkan anda mengendalikan dan mengekalkan lapisan data aplikasi anda dengan cara yang konsisten dan boleh diramal.
Kelas entiti adalah blok bangunan untuk aplikasi perniagaan, kerana ia direka untuk merangkum logik yang digunakan untuk melaksanakan peraturan perniagaan. Peraturan perniagaan ditakrifkan untuk memastikan bahawa proses automatik dilaksanakan hanya dalam skop dasar perniagaan. Contoh peraturan perniagaan termasuk:
diskaun pelanggan
- Kelulusan pinjaman
- Suruhanjaya Jualan
- Pengiriman dan Pengiraan Cukai
- Perpustakaan Orm
Pemetaan relasi objek biasanya dilakukan dengan bantuan perpustakaan. Istilah ORM yang paling sering merujuk kepada Perpustakaan ORM -Objektif Hubungan
Mapper-Ia kerja -kerja hubungan objek pemetaan untuk anda. Peraturan perniagaan biasanya memerlukan pelaksanaan batch pelbagai penyata SQL. Sekiranya pernyataan SQL tunggal gagal, ia boleh meninggalkan pangkalan data dalam keadaan yang tidak konsisten. Kebanyakan perpustakaan ORM menyokong ciri yang dipanggil Transaksi, yang menghalang peristiwa tersebut daripada berlaku. Sekiranya pernyataan SQL gagal dijalankan dalam konteks urus niaga ini, semua pernyataan SQL lain yang telah berjaya dilaksanakan dalam kumpulan itu tidak diterjemahkan oleh operasi yang disebut rollback.
Oleh itu, menggunakan perpustakaan ORM untuk membina lapisan data anda membantu memastikan pangkalan data sentiasa konsisten. Perpustakaan ORM biasanya mengandungi lebih banyak fungsi asas, seperti:- Pembina pertanyaan
- Skrip Migrasi
- alat CLI untuk menghasilkan kod boilerplate
- Fungsi menanam untuk jadual pra-pengisian dengan data ujian
Dalam artikel ini, saya akan memberikan coretan kod mengenai bagaimana setiap perpustakaan ORM melakukan perkara berikut:
- Tetapan dan Konfigurasi Awal
- Operasi CRUD Asas
- Operasi pertanyaan lanjutan
Saya juga memasukkan maklumat penting seperti tarikh pelancaran, bilangan pengguna, dan pautan dokumen, serta saluran sokongan yang ada. Saya juga akan membincangkan isu -isu yang paling penting yang berkaitan dengan prestasi pertanyaan, penyelenggaraan perpustakaan, dan falsafah seni bina yang anda perlu berhati -hati apabila membuat keputusan anda.
Saya menyusun senarai dengan tarikh mula dari yang paling awal hingga yang terkini. Saya membahagikan senarai ke dalam dua bahagian mengikut bahasa yang disokong utama: JavaScript dan TypeScript.
Sebelum kita memulakan penilaian, mari kita lihat terlebih dahulu di Knex.js, pembina pertanyaan SQL yang popular yang telah diintegrasikan dengan banyak perpustakaan ORM yang disenaraikan di sini. Knex.js sangat fleksibel dan secara amnya melakukan lebih baik daripada beberapa perpustakaan ORM yang mempunyai pelaksanaan pembina pertanyaan mereka sendiri. Pertimbangkannya sebagai kelebihan apabila memilih perpustakaan Orm untuk menggunakan knex.js sebagai asasnya.
knex.js: SQL Query Builder
- Mula: Disember 2012
- GitHub: 158.6K Pengguna
- Pangkalan data: Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle, dan Amazon Redshift
Jadi apa itu pembina pertanyaan?
Ia hanya API yang menyediakan satu set fungsi yang boleh dikaitkan bersama untuk membentuk pertanyaan. Berikut adalah contoh:
<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>
- Ia membantu anda abstrak kod anda dari dialek SQL pangkalan data anda, menjadikannya lebih mudah untuk ditukar.
- Ia menghapuskan atau mengurangkan kemungkinan serangan suntikan SQL ke atas permohonan anda.
- Ia membolehkan pembinaan pertanyaan mudah dengan keadaan dinamik.
- Ia mempunyai fungsi lain dan alat CLI untuk melaksanakan operasi pembangunan pangkalan data.
- Kolam Sambungan
- antara muka panggilan balik dan janji
- Interface Stream
- Sokongan Transaksi
- Sokongan mod
- Migration
- Sow Bents
<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>
<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>
<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>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>
Dalam contoh TypeScript di atas, knex.js hampir bertindak sebagai ORM. Walau bagaimanapun, tiada contoh objek entiti dibuat. Sebaliknya, gunakan definisi antara muka untuk membuat objek JavaScript dengan sifat jenis selamat.
Perhatikan bahawa banyak perpustakaan ORM yang disenaraikan dalam artikel ini Gunakan knex.js di latar belakang. Ini termasuk:
- Bookshelf
- objection.js
- Mikroorm
Perpustakaan Orm biasanya menyediakan ciri tambahan di atas knex.js. Mari kita lihat mereka di bahagian seterusnya.
JavaScript Orm Library
Dalam kategori ini, semua perpustakaan yang disenaraikan di sini ditulis dalam JavaScript dan boleh dijalankan secara langsung di Node.js. Sokongan TypeScript disediakan melalui jenis terbina dalam atau @jenis/pakej definisi nod. Sekiranya anda mahukan sokongan terkemuka untuk projek TypeScript anda, anda harus melangkau ke bahagian Perpustakaan Orm Typescript.
Dalam lapisan akses data, dua corak seni bina popular digunakan:
- Data Mapper
- Rekod Aktiviti
Menggunakan corak pemetaan data, kelas entiti adalah murni dan mengandungi hanya sifat. Operasi CRUD dan peraturan perniagaan dilaksanakan dalam bekas yang dipanggil repositori. Berikut adalah contoh:
<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>
Logik operasi CRUD dan peraturan perniagaan dilaksanakan dalam kelas entiti menggunakan mod rekod aktif. Berikut adalah contoh yang sama yang menggambarkan perkara di atas:
<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>
menggunakan mod salah satu mempunyai kelebihan dan kekurangannya. Corak -corak ini dinamakan oleh Martin Fowler dalam corak seni bina aplikasi Enterprise 2003nya. Jika anda ingin mengetahui lebih lanjut mengenai topik ini, anda harus menyemak buku ini. Kebanyakan perpustakaan ORM yang disenaraikan dalam artikel ini menyokong satu atau kedua -dua mod.
mari kita mula memperhatikan mereka sekarang.
Sequelize
- Mula: Julai 2010
- Laman web
- GitHub: Pengguna 726K
- Slack
- Pangkalan Data: Postgres, MySQL, MariaDB, SQLite, dan Microsoft SQL Server
Sequelize adalah perpustakaan node.js orm yang sangat matang dan popular dengan dokumentasi yang sangat baik dengan contoh kod yang dijelaskan dengan baik. Ia menyokong banyak ciri lapisan data yang telah kami sebutkan di perpustakaan sebelumnya. Tidak seperti Bookshelf, ia mempunyai pembina pertanyaan sendiri yang melakukan dan juga knex.js.
Memasang perpustakaan sangat mudah, dan pemacu pangkalan data juga sangat langsung:
<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>
Berikut adalah kod persediaan dan contoh penyata pertanyaan CRUD dan asas:
<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>
Berikut adalah contoh cara menulis pertanyaan yang kompleks:
<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>
Dalam contoh pertanyaan kompleks terakhir, output SQL adalah:
<code>const repository = connection.getRepository(User);. const user = new User(); user.firstName = "Timber"; await repository.save(user); const allUsers = await repository.find(); </code>
Sequelize menyokong pernyataan SQL mentah, yang memberikan pemaju fleksibiliti untuk menulis kenyataan SQL yang kompleks dan berprestasi tinggi. Hasilnya juga boleh dipetakan ke contoh entiti objek. Berikut adalah contoh:
<code>const user = new User(); user.firstName = "Timber"; await user.save(); const allUsers = await User.find(); </code>
Kelemahan utama Sequelize adalah bahawa ia melambatkan pembangunan dan masalah menumpuk dan tidak diselesaikan. Nasib baik, satu penyelenggara mengumumkan bahawa perpustakaan akan mendapat perhatian yang sepatutnya bermula pada tahun 2021. Perhatikan bahawa semua projek Perpustakaan ORM dalam artikel ini adalah sumber terbuka dan mereka memerlukan bantuan pemaju untuk menjadikannya lebih baik.
Bahagian yang tinggal adalah serupa dengan teks input. Oleh kerana batasan ruang, tempat ini tidak akan diperluaskan. Sila ambil perhatian bahawa format imej tetap sama.
Atas ialah kandungan terperinci 9 Orms JavaScript dan TypeScript terbaik untuk 2024. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.
