目錄
ORM是什麼
Object Relational Mapping (ORM)是一種用於建立物件導向程式語言與關聯式資料庫
的技術
可以把它視為是幫你把sql語法抽象化、進行包裝
What is an ORM – The Meaning of Object Relational Mapping Database Tools
TypeORM是什麼
TypeORM是一種ORM工具
,支援Typescript、Javascript,且可以在Node JS、React Native、瀏覽器等環境運行
優點如下
- 幫你把語法抽象化,
減少寫sql語法
,以提升開發速度 - 關聯式、非關聯式資料庫都支援
- 捕捉多數的問題(ex: input驗證),
安裝TypeORM
這篇使用TypeORM + MySQL
可以選擇全域或(拆分專案的)本地安裝,只是本地安裝
的話使用一些typeorm指令時前
面要加npx
如果entity(或者說專案)是用Typescript寫的話還要安裝ts-node
不過其實也不必自己手動,因為可以直接使用指令初始化typeorm專案
初始化指令會幫你產生一些基本的必須檔案(ex: package.json、tsconfig.json、src/index.ts、.gitignore、README.md)
typeorm init --database mysql
初始化後專案結構會長這樣
package.json長這樣,只要根據下方的內容去npm i就行了
reflect-metadata為了要讓裝飾器能正常運作
另外需要去data-source.ts
修改username、password、database(MySQL對應schema)之類的設定
至於要填什麼在MySQL workench都可以找到
什麼是entity
entity是一個class,它會map到DB的table,也就是說table裡的所有column都會對應到entity內的屬性
每個entity都必須有一個primary column
,且要被註冊到data-source.ts內的DataSource實例的entities屬性
如果漏了這部之後跑ts-node src/index.ts
就會遇到No metadata for "entity的名稱" was found.
const AppDataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "123456",
database: "bookInfos",
synchronize: true,
logging: false,
entities: ["./src/entities/*.ts"],
migrations: [],
subscribers: [],
})
建立entity
使用以下的指令可以建立一個新的entity
npx typeorm entity:create 放entity的路徑/entity名稱
如果想從DB內的table產生entity
也可以安裝typeorm-model-generator
npm i typeorm-model-generator
安裝好後在package.json內新增以下的指令,並執行它,就會可以和table同步了
"sync-entity":"npx typeorm-model-generator -h localhost -d db名稱 -u 使用者名稱 -x 密碼 -e 使用的資料庫 -o 輸出路徑"
使用express來個小例子
記得先安裝express,並確認是否已安裝ts-node、typescript、設定tsconfig.json
Example using TypeORM with Express
不過如果透過typeorm init指另的話,上述除了express都會幫安裝、設定好
npm i express @types/express --save-dev
參考資料
TypeORM - getting started
entities
typeorm-model-generator
Day 17 - 使用指令同步 DB 資料表來生成 Entity(上)