Node.jsで使えるORM
SequelizeはNode.jsで使えるORMです。DBとのやりとりを簡単にしてくれます。SequelizeはORMだけでなくDBのマイグレーションもできます。詳細は下記を参照してください。
関連記事:Node.js Sequelizeでマイグレーションを行う手順
トランザクションの実装
トランザクションも簡単に実現できます。実装はasync/awaitを使っているので適宜読み替えてください。
sequelizeはすでにインスタンス化済みのものです。そこからtransaction()を使うだけでトランザクションを開始できます。
同じトランザクションで処理したい関数はtransactionという引数にtxを渡してあげることで同じトランザクションで処理できます。
sequelize.transaction(async function(tx) { await User.destroy({ where: { id: [1,2,3] }, transaction: tx }); await Item.destroy({ where: { id: [1,2,3] }, transaction: tx }); });
このソースコードを実行するとトランザクションを開始してから各クエリが同じトランザクションで実行されていることがわかります。ログのカッコの中身がトランザクションIDになっています。コミットは最後まで処理が完了すると自動で実行してくれます。
Executing (21df761f-be66-4908-a865-289b719d2902): START TRANSACTION; Executing (21df761f-be66-4908-a865-289b719d2902): DELETE FROMuser
WHEREid
IN (1,2,3) Executing (21df761f-be66-4908-a865-289b719d2902): DELETE FROMitem
WHEREid
IN (1,2,3) Executing (21df761f-be66-4908-a865-289b719d2902): COMMIT;
トランザクションの途中でエラーが発生するとロールバックも自動で行ってくれます。
Executing (370f6e53-de11-4163-b46b-8e01aee1a332): START TRANSACTION; Executing (370f6e53-de11-4163-b46b-8e01aee1a332): DELETE FROMuser
WHEREid
IN (1,2,3) Executing (370f6e53-de11-4163-b46b-8e01aee1a332): DELETE FROMitem
WHEREid
IN (1,2,3) Executing (370f6e53-de11-4163-b46b-8e01aee1a332): ROLLBACK;
まとめ
Sequelizeはトランザクションレベルも細かく決めれるのでNode.jsでは鉄板のORMになるんじゃないかなと思っています。扱い方も簡単ですし、マイグレーションもできたりと多機能だけどシンプルなAPIがいいのでオススメします。
おすすめ書籍
基礎から応用までサンプルコードを使って解説しており、Node.jsが初めての人でも読める技術書となっています。上級者向けにはExpressフレームワークを使った実用的な開発手法の解説もありこれからアプリケーションを開発する人の参考になると思います。現状では書き方が古くなっていますが、Node.jsの初心者から上級者で学ぶことの多い書籍です。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す