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框架的内部机制时使用。