nestjs 事務的作用及事務的兩種常規使用方式

2021-10-19 23:27:21 字數 2278 閱讀 1710

比如有兩個表:賬號表和資訊表,而這兩個表之間有關聯。因此呢,我們在新增乙個表的資料的時候就得給另外乙個表也同時新增資料。然而這是兩步操作(即第一步我要新增賬號表資料,第一步在新增資訊表資料)。假若其中有乙個操作失敗了呢?如賬號新增成功,而資訊失敗了。如果不處理就會導致,這個賬號沒有資訊的。因此事務就發生作用了。在乙個事務中,必須要都成功才算是新增成功。否則都算失敗。

第一種:

在conroller層中引入事務裝飾器,並且當個引數傳遞到服務層。

如:user.controller.ts內容如下:

import

from

'@nestjs/common'

;import

from

'typeorm'

;import

from

'./user.service'

;@controller

('user'

)export

class

usercontroller

/* 刪除資料

由於有可能出現兩張表同時進行操作的情況

因此開啟事務事件:為了讓同時進行的表操作要麼一起完成,要麼失敗

@transaction()和 @transactionmanager() manager: entitymanager 是事務的裝飾器和物件

@query ?id=***

*/@delete

('del'

) @transaction()

delone

( @query

() query,

@transactionmanager

() manager: entitymanager,

): promise

}

解讀:在controller層的方法中新增乙個引數@transactionmanager() manager: entitymanager並在將該方法使用@transaction()進行裝飾,此時就能拿到事務裝飾器manager,將其傳遞給服務層就好了。

然後在服務層當作實體管理器使用即可

服務層user.service.ts 內容如下:

import

from

'@nestjs/common'

;import

from

'@nestjs/typeorm'

;import

from

'typeorm'

;import

from

'src/entities/user.info.entity'

;import

from

'../entities/user.account.entity'

;@injectable()

export

class

userservice);

manager.

delete

(useraccount, query.id)

;// 這裡的第二個引數等同於

return

'刪除成功!';}

}

解讀:delone中的manager即從controller層中傳遞過來的。manager是乙個事務實體管理器,可以直接操作相關方法或者構建query builder查詢。api參照:實體管理器api

這樣就形成事務了。

第二種:

直接在服務層使用實體管理其的transaction()方法即可

服務層user.service.ts 內容如下:

import

from

'@nestjs/common'

;import

from

'typeorm'

;import

from

'src/entities/user.info.entity'

;import

from

'../entities/user.account.entity'

;@injectable()

export

class

userservice);

transactionalentitymanager.

delete

(useraccount, query.id);}

);return

'刪除成功!';}

}

注意:以上兩種僅僅只是常規方式,還有其他的事務使用方式,有需要可以去官網了解。

資料庫事務的作用及事務隔離級別分析

什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 的縮寫,這四種狀態的意思是 1 原...

Transaction ACID 事務及事務特性

事務一般是針對db來討論 而且基本是討論4方面,目前的解釋都是在db上討論的 acid a花費100 購買b的商品,整個操作整體被當成事務處理 before a賬戶1000 b賬戶1000 after a賬戶900 b賬戶1100 原子性 整個操作包含2個部分 1 a賬戶 1000 100 900 ...

事務及事務隔離級別

什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 du...