TypeOrm框架----创建实体
1. 清除初始化项目中不需要的内容
Ⅰ.项目最初提供了一个User实体作为教例,我们把它删除(位置:\OrmTestProject\Entities\User.ts);
Ⅱ.然后我们要把它从数据库中抹去,操作如下:
修改代码:\OrmTestProject\data-source.ts
import "reflect-metadata"
import { DataSource } from "typeorm"
//删除了User的import
export const AppDataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "123456",
database: "test",
synchronize: true,
logging: false,
entities: [],//删除了User实体
migrations: [],
subscribers: [],
})
Ⅲ.修改代码:\OrmTestProject\index.ts
import { AppDataSource } from "./data-source"
AppDataSource.initialize().then(async () => {
}).catch(error => console.log(error))
也就是把函数的内容清空。
Ⅳ.然后我们在项目终端执行:
npm start
再查询数据库时,我们便发现test数据库内什么都没有了。这便是ORM的一个作用,我们不必和数据库直接打交道,我们在代码中做的事情,ORM都会替我们完成(执行项目时)。
值得提醒的是,正常情况下可以把data-source.ts中的synchronize属性设置为false。这有个好处数据库和代码不同步。
为什么好?----如果我们的数据库有一个叫name的属性,我们在代码中把它改成Name,ORM会认为我们想删除name属性,然后创建一个叫Name的属性。这恐怕会导致我们在数据库的数据丢失!
2. 创建实体
2.1 PlayPlan实体
代码中的实体(entity),即数据库中的表格。
我们先创建一个电影的播放计划实体:
\OrmTestProject\entity\PlayPlan.ts
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class PlayPlan{
@PrimaryGeneratedColumn()
PlanID: number;
@Column()
MovieID: number;
@Column()
StartTime: Date;
@Column()
EndTime: Date;
@Column()
IsCompleted: boolean;
@Column()
SeatString: string;
}
2.2 一对多关系的创建
我们创建一个电影实体,它与电影播放计划构成一对多的关系。注意代码中对一对多关系的声明:
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { PlayPlan } from "./PlayPlan";
@Entity()
export class Movie{
@PrimaryGeneratedColumn()
MovieID: number;
@Column()
MovieName: string;
@Column()
Summary: string;
@Column()
Footage: number;
@Column()
Language: string;
@Column()
Countryside: string;
@Column()
ReleaseTime: Date;
@Column()
IsDeleted: boolean;
@Column()
Kind: string;
//此处为一对多关系的声明写法
@OneToMany( type => PlayPlan, playplan => playplan.MovieID, { cascade: true })
playPlan: PlayPlan[];
}
2.3 创建一个实例
我们修改一下index.ts的代码:
\OrmTestProject\index.ts
import { AppDataSource } from "./data-source"
import { Movie } from "./entity/Movie"
AppDataSource.initialize().then(async () => {
let movie = new Movie;
//输入电影信息
movie.MovieName = "Green Book";
movie.Countryside = "USA";
movie.IsDeleted =false;
movie.Kind = "Feature Film";
movie.Language = "English";
movie.Summary = "A story of a friendship\
between the two men that spans race and class, the pianist will tour \
from New York";
movie.Footage = 130;
movie.ReleaseTime = new Date("2018-9-11");
//异步保存数据至数据库
let movieRepository = AppDataSource.getRepository(Movie);
await movieRepository.save(movie);
console.log("Movie has been inserted into DB successfully");
}).catch(error => console.log(error))
index.ts有什么作用? ----它其实没有什么作用,重要的是它含有的函数AppDataSource.initialize(),是执行数据库初始化的入口。作为示范,我们在这里插入了一个movie,但实际中并不是在这里插入数据,我们有专门的框架层进行这些操作,会在后期博文更新。
在终端运行项目:
npm start
再查询数据库我们便能看到结果:
3. 后谈
我们在插入数据时使用了getRepository方法,这实际上是建立了一个数据管理仓库(称它仓储吧)。TypeOrm为我们提供了基本的CRUD操作。但我们也可以通过Repository装饰器自定义一个仓储,实现更复杂的数据库操作。
Repository是完全面向对象的,也就是我们对实体进行了限制(比如我们定义了一个人,他不会因为程序运行一段时间后变成了猪)。
与Repository相似的是DAO,这在JAVA中很常见了,但DAO不是完全面向对象的,它类似一个toolbox,只负责加工送进来的数据(写得不好,可能人就成猪了)。我们称这种数据与方法分离的模型为贫血模型;集合在一起,具有很好的面向对象特性的叫充血模型。
标签:框架,Column,movie,数据库,ts,----,import,AppDataSource,TypeOrm From: https://www.cnblogs.com/feoandcode/p/16852070.html