Ларавел-подобная библиотека управления базами данных для NodeJS
Слышали ли вы об ORM в истории NodeJS?
NodeORM - это легкая и гибкая библиотека объектно-реляционного отображения (ORM) для приложений Node.js, вдохновленная библиотекой Laravel. Она обеспечивает бесшовный интерфейс между объектами JavaScript и реляционными базами данных, облегчая разработчикам взаимодействие с базами данных с помощью привычного синтаксиса JavaScript.
Он упрощает и оптимизирует процесс работы с реляционными базами данных, делая взаимодействие с базами данных более интуитивным и удобным для разработчиков. Это позволяет разработчикам сосредоточиться на создании надежных приложений, не заботясь о сложностях управления базами данных. Независимо от того, работаете ли вы с MySQL, SQLite или пользовательскими решениями для баз данных, NodeORM предлагает бесшовный и последовательный интерфейс для ваших потребностей в базах данных.
Установка
Настоятельно рекомендуется устанавливать с github, чтобы получить последние обновления.
npm install obaydmerz/nodeorm
Однако для большинства стабильных сборок вы можете использовать npm.
npm install @obayd/nodeorm
Ключевые особенности
- Независимость от баз данных: NodeORM поддерживает множество драйверов баз данных, включая MySQL, SQLite и пользовательские драйверы сырых функций, что позволяет пользователям работать с предпочитаемыми базами данных.
- Определение модели: Пользователи могут определять свои модели баз данных с помощью таких свойств, как имя таблицы, столбцы и первичные ключи. Это позволяет легко сопоставлять таблицы базы данных с классами JavaScript.
- Удобное построение запросов: Благодаря свободному синтаксису цепочки методов, NodeORM позволяет пользователям строить сложные SQL-запросы естественным и интуитивно понятным способом, упрощая создание динамических запросов для операций с базой данных.
- Класс
ModelItem
: КлассModelItem
представляет отдельные элементы (строки) в таблице базы данных с методами CRUD. Пользователи могут взаимодействовать с конкретными записями базы данных с помощью этого класса. - Класс
Collection
: КлассCollection
представляет группуModelItems
с возможностями группировки и фильтрации. Он позволяет пользователям работать с несколькими записями как с единым целым. - Обработка ошибок: NodeORM определяет пользовательские классы ошибок для конкретных сценариев ошибок, таких как
EmptyDataError
иUnmatchingStateError
. Это помогает пользователям справляться с ошибками более эффективно и изящно. - Динамическое создание моделей: Пользователи могут динамично создавать модели во время работы, избавляясь от необходимости их предварительного определения. Такая гибкость позволяет более эффективно адаптировать взаимодействие с базой данных.
- Ленивая загрузка: NodeORM использует оптимизацию ленивой загрузки во время итераций, что повышает производительность при работе с большими наборами данных.
- Отсутствие зависимостей: Библиотека типа "подключи и работай".
- Полная совместимость: Библиотека автоматически подключается к
mysql
,mysql2
иsqlite3
. - Множественные соединения: Вы можете беспрепятственно подключаться к нескольким базам данных одновременно.
- Неблокируемая структура: Эта библиотека основана на синтаксисе async-await.
- И многое другое...
// MySQL example
// Inserting a new row/item into a table named `test`.
import { Model, initialize } from "@obayd/nodeorm";
class Test extends Model {}
(async () => {
await initialize("mysql://root@localhost:3306/mydb", Test);
const myNewItem = Test.create();
myNewItem.string_value = "We have a better tomorrow!";
myNewItem.integer_value = 2024;
await myNewItem.save();
console.log(myNewItem.id); // Output: 1
})();
Изменения в базе данных:
// Reading the row that we just inserted.
// We used here an attribute *getter*
import { Model, initialize } from "../index.js";
class Test extends Model {
static _ourPhrase() {
// We used here an attribute *getter*
// Note we used the following syntax _attributeName
return this.string_value + " in the year of " + this.integer_value;
}
}
(async () => {
await initialize("mysql://root@localhost:3306/mydb", Test);
const myLastItem = await Test.last();
// We accessed an additional attribute.
console.log(myLastItem.ourPhrase); // Output: We have a better tomorrow! in the year of 2024
})();
// Editing the row that we just inserted.
import { Model, initialize } from "@obayd/nodeorm";
class Test extends Model {}
(async () => {
await initialize("mysql://root@localhost:3306/mydb", Test);
const myLastItem = await Test.last();
myLastItem.integer_value = 2025;
await myLastItem.save();
})();
Изменения в базе данных:
// Deleting the row that we just inserted.
// Demonstrates how to use find() to *find* items
import { Model, initialize } from "@obayd/nodeorm";
class Test extends Model {}
(async () => {
await initialize("mysql://root@localhost:3306/mydb", Test);
//const myLastItem = await Test.last();
// We used find() syntax instead of last() just to demonstrate how it works.
//const myLastItem = await Test.where("id", 1);
//const myLastItem = await Test.where("id", "=", 1);
const myLastItem = await Test.find(1);
await myLastItem.delete();
})();
Изменения в базе данных:
HeidiSQL используется для отображения изменений в базе данных, подумайте о его поддержке!
Мультиподдержка
NodeORM позволяет получать доступ и управлять другими типами баз данных, например SQLite.
// SQLite example
import { Model, initialize } from "@obayd/nodeorm";
class Test extends Model {}
(async () => {
await initialize("C:/Users/Hello/Documents/mysqlite.db", Test);
const my = await Test.last();
console.log(my.string_value);
})();
Легко, не правда ли?
Для получения дополнительной информации и расширенных возможностей использования обратитесь к NodeORM Wiki.
Надеюсь, вы узнали что-то новое и... пока!