?
1.?.create
- 用途:
.create
?方法通常用于創建一個新的實體(Entity)實例,并為其屬性設置初始值。這個方法不會立即將實體保存到數據庫中,而是返回一個配置好的實體實例,該實例可以被進一步修改或用于后續操作。 - 行為:
.create
?方法只是在內存中創建了一個實體的副本,沒有與數據庫進行交互。它通常返回一個實體類的實例,該實例的狀態是“新的”(即尚未持久化到數據庫)。
2.?insert
(概念上)
- 用途:
insert
?這個詞通常用于描述將新數據直接插入到數據庫表中的操作。然而,在ORM框架中,insert
?可能不是直接暴露給開發者使用的方法名,而是框架內部實現的一部分。開發者通常會通過調用?.save
?或其他類似方法來觸發插入操作。 - 行為:如果直接對應到數據庫操作,
insert
?會將一行新數據添加到表中。在ORM中,這通常是通過調用?.save
?方法(在實體狀態為“新”的情況下)來間接實現的。
3.?.save
- 用途:
.save
?方法用于將實體實例的狀態保存到數據庫中。如果實體是新的(即之前從未被保存到數據庫中),那么.save
?方法會執行插入操作。如果實體已經存在于數據庫中(即它有一個非空的ID或主鍵),那么.save
?方法會執行更新操作,以反映實體的當前狀態。 - 行為:
.save
?方法會檢查實體的狀態,并據此決定是執行插入操作還是更新操作。它會與數據庫進行交互,以確保實體的狀態與數據庫中的記錄保持一致。
數據庫操作案例
?登録??create? ??insert
? ? const ooo = AppDataSource.getRepository(ooo).create({
? ? ? appId: request.appId,
? ? ? oooId: request.oooId,
? ? ? oooName: request.oooName,
? ? ? oooTicketKeepUpperLimit: request.oooTicketKeepUpperLimit ?? undefined,
? ? ? dailyShareUpperLimit: request.dailyShareUpperLimit ?? undefined,
? ? ? dailyoooTicketAutomaticGrantNumber:
? ? ? ? request.dailyoooTicketAutomaticGrantNumber ?? undefined,
? ? ? perShareoooTicketGrantNumber:
? ? ? ? request.perShareoooTicketGrantNumber ?? undefined,
? ? ? oooStartdate: request.oooStartdate ?? NULL_DATE,
? ? ? oooEnddate: request.oooEnddate ?? NULL_DATE,
? ? ? itemExchangeStartdate: request.itemExchangeStartdate ?? NULL_DATE,
? ? ? itemExchangeEnddate: request.itemExchangeEnddate ?? NULL_DATE,
? ? ? attentionText: request.attentionText,
? ? });
? ? CommonUtils.outputDBLog(logger, 'ooo', 'insert', ooo);
? ? await AppDataSource.getRepository(ooo).insert(ooo);
更新??save
? ? oooInfo.itemExchangeEnddate =
? ? ? request.itemExchangeEnddate != undefined
? ? ? ? ? request.itemExchangeEnddate
? ? ? ? : oooInfo.itemExchangeEnddate;
? ? oooInfo.attentionText =
? ? ? request.attentionText != undefined
? ? ? ? ? request.attentionText
? ? ? ? : oooInfo.attentionText;
? ? CommonUtils.outputDBLog(logger, 'ooo', 'save', oooInfo);
? ? await AppDataSource.getRepository(ooo).save(oooInfo);
總結
.create
?用于在內存中創建新的實體實例,不會立即與數據庫交互。insert
(概念上)是數據庫操作,用于將新數據添加到表中,但在ORM中通常通過?.save
?方法間接實現。.save
?用于將實體實例的狀態保存到數據庫中,根據實體的狀態執行插入或更新操作。
在實際開發中,你會更多地使用?.create
?來創建新的實體實例,并使用?.save
?來將這些實例保存到數據庫中。而?insert
?這個詞更多地是在討論數據庫操作或ORM框架的內部機制時使用。