TL;DR
Object-Relational Mapping(オブジェクト関係マッピング)の略。データベースとオブジェクト指向のプログラミング言語の間で、互換性のないデータを変換する技法である。
なぜ必要か
Wikipedia によると、オブジェクトは複数の値や関連をまとめて扱えるが、一般的な SQL データベースはスカラー値の表しか保存できない。ORM はこの変換と、対応する SQL の生成を自動化するので、プログラマからはデータベースが永続的なオブジェクトの保管所のように見える。
例
Wikipedia では、Java の Hibernate、Ruby on Rails の Active Record などを挙げている。Node.js と TypeScript 向けには Prisma ORM がある。
注意点
Wikipedia によると、変換層が遅く、機能が足りないことがある。特に生成される SQL の質が問題になり、性能が落ちたり、メモリを余分に使ったりする。完全に透過的には動かないので、ある程度はデータベースを意識する必要がある。ORM はオブジェクト指向と関係モデルのインピーダンスミスマッチへの対症療法にすぎない、という批判もある。
手を動かしてわかるクリーンアーキテクチャ 第2章 によると、ORM が管理するエンティティは永続化層に置かれるので、レイヤードアーキテクチャではドメイン層からも使えてしまう。その結果、ドメイン層と永続化層が密結合になりやすい。
GraphQL における N+1 問題の発生しやすさはデメリットなのか では、ORM はデータベースの呼び出しを透過的に行うので、N+1 問題に気づきにくくなると述べている。