TypeORM — это мощная библиотека объектно-реляционного сопоставления (ORM) для TypeScript и JavaScript, широко используемая для разработки приложений, управляемых базами данных. Одной из его ключевых особенностей является возможность работы со встроенными сущностями, что позволяет создавать более сложные и структурированные модели данных. В этой статье мы погрузимся в мир встроенных сущностей в TypeORM, изучая различные методы и приемы оптимизации разработки баз данных.
-
Что такое встроенные сущности?
Встроенные сущности в TypeORM — это объекты, которые хранятся как часть другой сущности, а не в отдельной таблице. Это позволяет вам организовывать связанные данные в одной таблице, уменьшая сложность схемы базы данных. -
Объявление встроенных объектов.
Чтобы объявить встроенный объект в TypeORM, вы можете использовать декоратор@Embedded()
. Давайте рассмотрим пример, где у нас есть сущностьUser
со встроенной сущностьюAddress
:
@Entity()
class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Embedded(() => Address)
address: Address;
}
@Embeddable()
class Address {
@Column()
street: string;
@Column()
city: string;
@Column()
country: string;
}
- Сохранение встроенных объектов.
При сохранении объекта со встроенными объектами TypeORM автоматически обеспечивает сохранение встроенных объектов. Вы можете просто назначить внедренный объект сущности соответствующему свойству родительской сущности и сохранить его.
const user = new User();
user.name = "John Doe";
user.address = new Address();
user.address.street = "123 Main Street";
user.address.city = "New York";
user.address.country = "USA";
await connection.manager.save(user);
- Запрос встроенных объектов.
TypeORM предоставляет различные методы запроса встроенных объектов. Например, вы можете использоватьQueryBuilder
для создания сложных запросов, включающих встроенные объекты.
const users = await connection
.createQueryBuilder(User, "user")
.where("user.address.city = :city", { city: "New York" })
.getMany();
- Обновление встроенных объектов.
Чтобы обновить встроенный объект, вы можете изменить свойства объекта встроенного объекта и сохранить родительский объект.
const user = await connection.manager.findOne(User, { id: 1 });
user.address.city = "Los Angeles";
await connection.manager.save(user);
- Удаление встроенных объектов.
Чтобы удалить встроенный объект, вы можете назначитьnull
соответствующему свойству родительского объекта и сохранить его.
const user = await connection.manager.findOne(User, { id: 1 });
user.address = null;
await connection.manager.save(user);
В этой статье мы исследовали возможности встроенных сущностей в TypeORM. Мы научились объявлять, сохранять, запрашивать, обновлять и удалять встроенные объекты, предоставляя вам инструменты для создания более структурированных и эффективных моделей данных. Используя возможности встроенных объектов TypeORM, вы можете вывести разработку базы данных на новый уровень, создавая надежные и масштабируемые приложения.
Не забудьте поэкспериментировать со встроенными объектами в TypeORM и раскрыть весь потенциал ваших приложений, управляемых базой данных!