Rumah >hujung hadapan web >tutorial js >3 JavaScript Orms yang mungkin anda tidak tahu
mata teras
bookshelf.js
bookshelf.js adalah node.js orm yang direka untuk berfungsi dengan baik dengan PostgreSQL, MySQL, MariaDB, dan SQLite3. Ia dibina di Knex SQL Query Builder dan mengikuti beberapa corak dalam Backbone.js, seperti model dan koleksi dan konvensyen penamaan yang serupa. Jika anda pernah menggunakan Backbone, anda mungkin terbiasa dengan rak buku dengan cepat. Untuk memasang rak buku, anda perlu memasang Knex dan pemacu pangkalan data:<code class="language-bash"># 获取 knex $ npm install knex --save # 获取 bookshelf $ npm install bookshelf --save # 获取其中一个数据库驱动程序 $ npm install pg $ npm install mysql $ npm install mariasql $ npm install sqlite3</code>
Selepas pemasangan selesai (pastikan untuk lulus bendera -save supaya ia ditambahkan ke fail pakej.json), anda boleh menggunakannya dalam aplikasi Node.js anda seperti ini:
<code class="language-javascript">var knexInstance = require('knex')({ client: 'mysql', // 或您正在使用的数据库 connection: { host : '127.0.0.1', user : 'scott', password : 'tiger', // Scott 的猫的名字 database : 'db_name', charset : 'utf8' } }); // 通过传递 Knex 实例来初始化 Bookshelf var bookshelf = require('bookshelf')(knexInstance); var User = bookshelf.Model.extend({ tableName: 'users' });</code>Seperti yang anda lihat, buat objek rak buku dengan meluluskan contoh Knex sebagai parameter. Anda kemudian boleh menggunakan kaedah Extend () model untuk membuat model dalam aplikasi anda, sama seperti model pengguna yang digunakan untuk jadual pengguna dalam contoh di atas. Ingat bahawa rak buku adalah satu -satunya contoh rak buku yang harus anda gunakan sepanjang aplikasi anda. Oleh itu, lebih baik untuk menjadikannya di mana -mana dalam aplikasi anda, seperti membungkusnya dalam singleton atau meletakkannya dalam fail yang berbeza dan memperkenalkannya jika diperlukan. Rak buku membolehkan anda mempunyai satu-satu, satu-ke-banyak dan banyak hubungan banyak. Dalam kes kita, ia akan sama dengan:
<code class="language-javascript">var User = bookshelf.Model.extend({ tableName: 'users', posts: function() { return this.hasMany(Post); } }); var Post = bookshelf.Model.extend({ tableName: 'posts', user: function() { return this.belongsTo(User); } });</code>Jika anda ingin menyemaknya, anda boleh mencari rak buku di GitHub.
Sequelize
Sequelize adalah satu lagi orm node.js dan io.js (mereka akhirnya digabungkan bersama). Ia menyokong PostgreSQL, MySQL, MariaDB, SQLite dan MSSQL, dan mempunyai sokongan transaksi yang kuat, hubungan, membaca dan replika fungsi. Anda boleh memasangnya dengan menjalankan arahan berikut:
<code class="language-bash"># 安装 Sequelize $ npm install --save sequelize # 安装数据库驱动程序 $ npm install --save pg pg-hstore # 对于 mysql 和 mariadb 方言 $ npm install --save mysql $ npm install --save sqlite3 # MSSQL $ npm install --save tedious</code>Sekarang anda boleh menggunakannya seperti yang ditunjukkan dalam contoh berikut:
<code class="language-javascript">var Sequelize = require('sequelize'); var sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql', // 使用其中一个 pool: { max: 5, min: 0, idle: 10000 }, // 仅限 SQLite storage: 'path/to/database.sqlite' }); // 或者您可以简单地使用连接 uri var sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');</code>Sama seperti bookshelf.js, anda hanya memerlukan sambungan pangkalan data. Selepas itu, anda boleh membuat model, contohnya:
<code class="language-javascript">var User = sequelize.define('user', { firstName: { type: Sequelize.STRING, field: 'first_name' // `first_name` 列与 User.firstName 匹配 }, lastName: { type: Sequelize.STRING } }, { freezeTableName: true // 模型 tableName (`user`) 将与模型名称相同 });</code>Sequelize.string di atas sepadan dengan Varchar dalam SQL. Jenis data lain adalah sekuel.integer untuk integer dan sequelize.blob untuk gumpalan (atau bytea dalam postgres). Anda boleh membaca senarai penuh di sini. Sequelize membolehkan anda menulis hubungan antara jadual. Sebagai contoh, jika anda mempunyai model yang dipanggil Projek dan model lain yang dipanggil Pemaju dan ingin memberikan beberapa pemaju kepada projek, anda boleh melakukan ini:
<code class="language-javascript">Project.hasMany(Developer, {as: 'devs'})</code>Ini akan memastikan bahawa bidang yang diperlukan ditambah kepada setiap model (dalam kes ini Project_ID dalam model pemaju). Atau, jika anda rasa anda tidak boleh mendapat manfaat daripada API Sequel, anda boleh menjalankan pertanyaan SQL mentah. Sequelize juga boleh didapati di GitHub.
Lovefield
Lovefield bukan Orm sebenar. Ia sebenarnya merupakan pangkalan data relasi untuk aplikasi web, yang dibina di IndexEdDB, yang dibangunkan oleh Google, dan ditulis sepenuhnya dalam JavaScript. Ia tidak menyokong pertanyaan SQL mentah, tetapi ia dilengkapi dengan API yang cuba meniru sintaks SQL. Anda boleh memasangnya menggunakan Bower:
<code class="language-bash">$ bower install lovefield --save</code>atau npm:
<code class="language-bash">$ npm install lovefield --save</code>Selepas menambahkannya ke fail HTML, anda boleh mula menggunakannya sebagai pangkalan data relasi depan. Membuat pangkalan data dan jadual adalah mudah:
<code class="language-javascript">// 为“待办事项列表”创建数据库 var todoDB = lf.schema.create('todo_db', 1); var item = todoDB.createTable('items') .addColumn('id', lf.Type.INTEGER) .addColumn('task', lf.Type.STRING) .addColumn('deadline', lf.Type.DATE_TIME) .addColumn('done', lf.Type.BOOLEAN) .addPrimaryKey(['id']);</code>Coretan kod ini menunjukkan cara membuat pangkalan data bernama TODO_DB dan jadual yang dinamakan item, serta lajur yang diberikan (ID sebagai kunci utama, tugas, tarikh akhir, dan selesai). Pada ketika ini, untuk mendapatkan senarai semua tugas yang belum selesai, kod itu akan menjadi:
<code class="language-javascript">todoDB.select() .from(item) .where(item.done.eq(false)) .exec(); // exec() 返回一个 Promise</code>Kod di atas sangat serupa dengan SQL, di mana pertanyaan yang sama akan menjadi:
<code class="language-bash"># 获取 knex $ npm install knex --save # 获取 bookshelf $ npm install bookshelf --save # 获取其中一个数据库驱动程序 $ npm install pg $ npm install mysql $ npm install mariasql $ npm install sqlite3</code>
anda juga boleh menyusunnya seperti berikut:
<code class="language-javascript">var knexInstance = require('knex')({ client: 'mysql', // 或您正在使用的数据库 connection: { host : '127.0.0.1', user : 'scott', password : 'tiger', // Scott 的猫的名字 database : 'db_name', charset : 'utf8' } }); // 通过传递 Knex 实例来初始化 Bookshelf var bookshelf = require('bookshelf')(knexInstance); var User = bookshelf.Model.extend({ tableName: 'users' });</code>
Di samping pertanyaan mudah ini, Lovefield dapat mengendalikan pertanyaan yang lebih kompleks, seperti bergabung. Jika saya mempunyai rujukan dalam dua projek jadual dan pemaju (merujuk kepada projek jadual dan pemaju), dan ingin melihat semua projek untuk pemaju tertentu, saya akan menulis:
<code class="language-javascript">var User = bookshelf.Model.extend({ tableName: 'users', posts: function() { return this.hasMany(Post); } }); var Post = bookshelf.Model.extend({ tableName: 'posts', user: function() { return this.belongsTo(User); } });</code>
supaya anda dapat melihat bahawa Lovield bertindak sebagai lapisan SQL di atas IndexedDB. Ia juga menyokong urus niaga asid (atomik, konsistensi, pengasingan, kegigihan), sekatan dan melangkau (berguna apabila paging), pertanyaan parameter, dan banyak lagi. Sama seperti Orms lain, anda boleh memuat turun Lovefield dari GitHub.
Kesimpulan
Setiap pemaju harus mempunyai pengetahuan SQL, tetapi menulis pertanyaan SQL adalah membosankan, terutama dengan begitu banyak Orms. Apabila mereka membuat pekerjaan anda lebih mudah, mengapa tidak menggunakannya pada mulanya? Dalam artikel ini, saya telah merangkumi beberapa Orms yang paling penting yang dikeluarkan setakat ini. Terima kasih kepada contoh -contoh yang disediakan untuk setiap ORM, anda kini boleh secara sedar menentukan ORM yang digunakan dan ORM yang sesuai dengan keperluan anda. Bagaimana dengan anda? Orm JavaScript mana yang anda gunakan? Sila komen pilihan anda di bawah.
(bahagian FAQ berikutnya telah ditinggalkan kerana kandungannya lemah berkaitan dengan topik artikel dan terlalu panjang, yang akan menjejaskan kesan pseudo-asal. Jika perlu, anda boleh mencadangkannya secara berasingan.)
Atas ialah kandungan terperinci 3 JavaScript Orms yang mungkin anda tidak tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!