TypeORM 是一個用於 TypeScript 和 JavaScript 的 ORM (Object-Relational Mapping) 框架,用於開發後端應用程序的數據庫交互。它提供了一個強大的物件關聯映射器,使開發者能夠以面向對象的方式操作數據庫。
物件關聯映射 (Object-Relational Mapping, ORM) 是一種技術,用於在關係型數據庫和物件導向編程語言之間建立映射。通過使用 ORM,開發者可以使用物件和類的概念來操作數據庫,而無需直接處理 SQL 查詢。
TypeORM 提供了許多方便的功能,例如對象的創建、更新和刪除,以及對象之間的關聯。它支持多種數據庫,包括 SQLite3,這使得開發者可以根據自己的需求選擇最適合的數據庫。
而SQLite3 是一個嵌入式的關聯式數據庫管理系統,它是一個輕量級、自包含且無需服務器的數據庫引擎。它的特點是占用資源少,適用於一些資源有限的環境,如移動設備和嵌入式系統。它可以直接將數據庫存儲在應用程序的本地文件中,而不需要單獨的服務器進程。這使得它非常適合在本地應用程序中使用,如行動應用程序和桌面應用程序。
總結來說,SQLite3 是一個輕量級、高效和易於使用的嵌入式關聯式數據庫引擎,它與 TypeORM 框架搭配使用,可以為開發者提供便捷的數據庫交互方式。
npm install typeorm --save
npm install reflect-metadata --save
npm install better-sqlite3
npm install node-gyp
npm install @types/node --save-dev
npm install @electron/rebuild --save-dev
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number | undefined
@Column()
Name: string | undefined
@Column()
description: number | undefined
}
export class UserDao {
dataSource: DataSource;
sqlDataBase: SqlDataBase;
constructor() {
this.sqlDataBase = new SqlDataBase();
this.dataSource = this.sqlDataBase.dataSource;
}
async findUser(id: number) {
return await this.dataSource.manager.findBy(User, { id: id });
}
async saveUser(user: any) {
return await this.dataSource.manager.save(User, user);
}
async deleteUser(name:string) {
return await this.dataSource.createQueryBuilder().delete()
.from(User)
.where("name = :name", { name: name })
.execute();
}
}
apiServer.get('/User/:id', (req, res) => {
let id = req.params["id"] ? parseInt(req.params["id"]) : 0;
console.log(id);
userDao.findUser(id).then((data: any) => {
res.send(data);
});
});
apiServer.post('/UserSave', (req, res) => {
console.log(req.body);
userDao.saveUser(req.body).then((data: any) => {
res.status(200).send({status:"user save OK"});
});
});
apiServer.delete('/UserDelete/:name', (req, res) => {
let name = req.params["name"];
console.log(name);
userDao.deleteUser(name).then((data: any) => {
res.status(200).send({status:"sqlite delete OK"});
});
});
本次完成localDB串接,先完成簡單範例User資料新增搜尋刪除確認流程,後續在研讀Typescript將架構完整.