TypeORM - Entity

Encja to zbiór pól i powiązanych operacji bazy danych. Służy do mapowania tabeli bazy danych i jej pól z jednostkami i ich atrybutami. W tym rozdziale szczegółowo omówiono encje TypeORM.

Wprowadzenie

Utwórzmy w naszym kodzie prostą klasę Entity. Przejdź do lokalizacji głównej projektu, przejdź do folderu src i przejdź do folderu encji. Teraz utwórz plik TypeScript, Student.ts i wprowadź poniższy kod -

Student.ts

import {Entity, PrimaryGeneratedColumn, Column} from "typeorm"; 

@Entity() 
export class Student {   

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   Name: string; 
   
   @Column() 
   age: number; 
}

Tutaj,

  • Entity() decorator służy do reprezentowania, że Student klasa jest bytem.
  • PrimaryGeneratedColumn() decorator jest używana do reprezentowania, że ​​kolumna id jest kolumną klucza podstawowego Student jednostka.
  • Column() decorator jest używana do reprezentowania innych kolumn, takich jak Name i Age z Student jednostka.

Teraz klasa Entity Studentjest tworzone. TypeORM automatycznie wygeneruje tabelę odpowiadającą plikowiStudent encji w naszej bazie danych i otrzyma nazwę student. Teraz przejdź dosrc/index.ts plik i dodaj następujący kod -

index.ts

import "reflect-metadata"; 
import {createConnection} from "typeorm";
import {Student} from "./entity/Student"; //import Student entity

createConnection().then(async connection => { 

   console.log("Inserting a new record into the student database..."); 
   
   //create student object const stud = new Student(); 
   
   //Assign student name and age here stud.Name = "student1"; 
   stud.age = 12; 
   
    //save student object in connection await connection.manager.save(stud); console.log("Saved a new user with id: " + stud.id);
    
    console.log("Loading users from the database...");

    //Display student saved records const students = await connection.manager.find(Student); console.log("Loaded users: ", students);

    console.log("Here you can setup and run express/koa/any other framework.");
}).catch(error => console.log(error));

Tutaj,

  • Wiersz 1 - 3 importuje odpowiednie klasy, createConnection i Student
  • Linia 5 tworzy nowe połączenie z bazą danych za pomocą createConnection a jeśli połączenie zostanie nawiązane, wykonuje kod wewnątrz then blok.
  • Linia 10 tworzy nowy obiekt Studenta, stud.
  • Wiersze 13-14 ustawiają atrybuty nowo utworzonego obiektu stadniny.
  • Linia 17 zapisuje jednostkę do bazy danych przy użyciu metody zapisu dostępnej w connection.manager obiekt.
  • Linia 23 pobiera dane studenta z bazy danych przy użyciu metody wyszukiwania dostępnej w programie connection.manager obiekt.

Uruchom serwer MySQL i uruchom swoją aplikację

Stworzyliśmy jednostkę Student i tworzymy połączenie w index.ts. Uruchommy zarówno serwer MySql, jak i Twoją aplikację.

npm start

Spowoduje to wyświetlenie na ekranie następującego wyniku -

Wynik

otwarty mysql serwer po student tabela zostanie dodana do bazy danych.

Kolumny

Jak dowiedzieliśmy się wcześniej, Entity to w rzeczywistości zbiór atrybutów. Jako obiekt obiekt odwołuje się do tabeli bazy danych. Jego atrybuty / zmienne składowe odnoszą się do odpowiednich pól / kolumn tabeli bazy danych. TypeORM obsługuje wszystkie typy pól bazy danych za pośrednictwem klasy Column. W tym rozdziale poznajmy różne typy kolumn obsługiwane przez TypeORM.

@Column() Klasa dekoratora służy do reprezentowania kolumny i jej typu w jednostce.

Na przykład atrybut wiek jednostki studenckiej i typ atrybutu wiek można zdefiniować w następujący sposób:

@Column("int") age: integer; // OR @Column({ type: "int" }) age: integer;

Tutaj,

  • agejest atrybutem jednostki. Innymi słowy, wiek to pole / kolumna w tabeli uczniów w bazie danych.
  • int reprezentują typ kolumny wieku w bazie danych.

TypeORM obsługuje prawie wszystkie typy dostępne w popularnym silniku bazy danych. W rzeczywistości TypeORM umożliwia różne zestawy typów dla każdego silnika bazy danych. Możemy bez problemu korzystać z dowolnego typu bazy danych obsługiwanego przez nasz silnik bazy danych.

Na przykład typ obsługiwany przez TypeORM dla silnika bazy danych postgresql jest następujący -

int, int2, int4, int8, smallint, integer, bigint, decimal, numeric, real, float, float4, float8, double precision, money, character varying,

varchar, character, char, text, citext, hstore, bytea, bit, varbit, bit

varying, timetz, timestamptz, timestamp, timestamp without time zone, timestamp with time zone, date, time, time without time zone, time with time zone, interval, bool, boolean, enum, point, line, lseg, box, path, polygon, circle, cidr, inet, macaddr, tsvector, tsquery, uuid, xml, json, jsonb, int4range, int8range, numrange, tsrange, tstzrange, daterange, geometry, geography, cube

Podobnie TypeORM obsługuje inny zestaw typów danych dla MySQL.

Opcje kolumn

TypeORM udostępnia obszerny zestaw opcji innych niż typ do opisu kolumny. Na przykład opcja długości odnosi się do długości pola bazy danych i można ją określić jak poniżej -

@Column("varchar", { length: 100 })

Oto niektóre z najczęściej używanych opcji kolumn -

  • name - nazwa pola / kolumny bazy danych.
  • length - Długość pola / kolumny bazy danych.
  • nullable - Określ, czy pole / kolumna bazy danych dopuszcza wartość null, czy nie.
  • default - Domyślna wartość pola / kolumny bazy danych.
  • primary - Określ, czy pole / kolumna bazy danych jest kluczem podstawowym tabeli.
  • unique - Określ, czy pole / kolumna bazy danych jest unikalna
  • *precision** - Precyzja pola / kolumny bazy danych
  • scale - Skala pola / kolumny bazy danych
  • comment - Komentarz lub opis pola / kolumny bazy danych

@Generated decorator

TypeORM zapewnia dodatkowy dekorator @Generated do automatycznego generowania wartości kolumn. Na przykład, uniwersalnie unikalny identyfikator (UUID) jest dość często używany w bazie danych do przechowywania unikatowej wartości w kolumnie. Przykładowy kod do generowania UUID jest następujący -

@Entity() 
export class Student {
 
   @PrimaryColumn() 
   id: number; 
   
   @Column() 
   @Generated("uuid") 
   uuid: string; 
}

Tutaj,

uuid jest generowany automatycznie i przechowywany w bazie danych.

Kolumny podstawowe

Co najmniej jedno podstawowe pole kolumny jest wymagane dla każdej jednostki w bazie danych. Jest podzielony na różne typy dekoratorów. Omówimy to jeden po drugim.

@PrimaryColumn()

Dekorator @PrimaryColumn () służy do tworzenia kolumny podstawowej dla dowolnego typu danych. Prosty przykład pokazano poniżej,

import {Entity, PrimaryColumn} from "typeorm"; 

@Entity() 
export class Student {        
@PrimaryColumn() 
   id: number; 
}

Tutaj,

id jest liczbą całkowitą, która nie akceptuje zduplikowanych wartości, ale musimy przypisać wartości.

Możemy również przypisać kolumnę podstawową do jednego lub więcej pól, jeśli sytuacja tego wymaga.

Przykład

import {Entity, PrimaryColumn} from "typeorm"; 

@Entity() 
export class Student { 
   
   @PrimaryColumn() 
   id: number; 
   
   @PrimaryColumn() 
   email: string; 
   
   @PrimaryColumn() 
   phone: number; 
}

@PrimaryGeneratedColumn ()

@PrimaryGeneratedColumn()Pole służy do określenia podstawowej kolumny, a także do automatycznego generowania wartości kolumny w bazie danych. Jest to pokazane poniżej -

import {Entity, PrimaryGeneratedColumn} from "typeorm"; 

@Entity() 
export class Student {

   @PrimaryGeneratedColumn() 
   id: number;
}

Tutaj,

Nie musisz przypisywać wartości identyfikatora; zostanie wygenerowany automatycznie przez TypeORM w tabeli bazy danych.

@PrimaryGeneratedColumn („uuid”)

@PrimaryGeneratedColumn akceptuje również argument określający typ generatora. Jednym z głównych zastosowań jest generowanie unikalnego identyfikatora na podstawie UUID.

import {Entity, PrimaryGeneratedColumn} from "typeorm";

@Entity() 
export class Student {  
   @PrimaryGeneratedColumn("uuid") id: string; 
}

typ kolumny z prostą tablicą

Zaawansowana relacyjna baza danych obsługuje typ danych tablicowych. Aby obsługiwać typ danych tablicowych, TypeORM zapewnia specjalny typ kolumny, * simple-array "do przechowywania wartości pierwotnych tablic. Przykładowy kod do użycia jest następujący -

@Entity() 
export class Student { 
   
   @PrimaryGeneratedColumn() 
   id: number;

   @Column("simple-array") 
   names: string[]; 
}

typ kolumny simple-json

Wiele nowoczesnych silników bazodanowych obsługuje bazę danych JSON. Aby użyć typu danych JSON, TypeORM zapewnia specjalny typ, pojedynczy json. Przykładowy kod do użycia jest następujący:

@Entity() 
export class Student { 

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column("simple-json")
   info: { firstName: string, middleName: string, lastName: string }; 
}

Wartość tę można zdefiniować w index.ts jako,

index.ts

const stud = new Student(); 
stud.info = { firstName: "John", middleName: "peter", lastName: "Michael" };

Specjalne kolumny

TypeORM obsługuje następujące specjalne kolumny

  • @CreateDateColumn - Jest to specjalna kolumna do automatycznego ustawiania daty wstawienia podmiotu.
  • @UpdateDateColumn - Służy do automatycznego ustawiania czasu aktualizacji jednostki.
  • @VersionColumn - Automatycznie ustaw numer wersji dla podmiotu.

Dziedziczenie jednostek

Dziedziczenie jednostek służy do ograniczania powielania jednostek. Rozważ poniższe podmioty -

Result.ts

@Entity() 
export class Result {    

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   title: string; 
   
   @Column() 
   description: string; 
   
   @Column() 
   eligible: string 
}

Grade.ts

Kod dla grade.ts jest następujący -

@Entity() 
export class Grade {

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   name: string; 
   
   @Column() 
   title: string; 
   
   @Column() 
   description: string;
   
   
   
   @Column() 
   grading : string; 
}

Tutaj,

Powyższe dwie jednostki mają id kolumny, tytuł i opis. Korzystając z dziedziczenia jednostek, tworzymy szczegóły klasy bazowej i łączymy dwie powyższe jednostki, jak określono poniżej.

Details.ts

export abstract class Details {

   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   title: string; 
   
   @Column() 
   description: string; 
} 
@Entity() 
export class Result extends Details{  

   @Column() 
   eligible: string 
} 
@Entity() 
export class Grade extends Details{   

   @Column() 
   name : string; 
   
   @Column() 
   grading : string; 
}

Teraz uruchom swój serwer, możesz zobaczyć poniższą odpowiedź,

Teraz otwórz serwer mysql i przejdź do bazy danych, możesz zobaczyć następujące tabele,

Tabela ocen

Tabela wyników