ORM に関して書くよ

データベースをある程度触っている人でも、 ORM と言われてぴんとくる人はそうはいないんじゃないだろうか。
すごく大雑把に言えば、「オブジェクト指向言語でデータベースプログラミングをする際、記録装置としてのリレーショナルデータベースとの仲立ちをするサブシステム」みたいな表現になると思う。
何やら難しそうだが、あまり、難しく考えずに実際にプログラミングをする場合を考えればいいと思う。
オブジェクト指向で作成されたアプリを実行するときにはアプリ内部では多様なオブジェクトが動いている。が、ある程度、必要な処理が終わって、さあ、これをデータベースに記録(永続化)しようというときにけっこう困ったことになってしまう。
データベースが理解できるのは SQL 文だ。出力様式に合わせて毎度毎度 SQL 文を書くのか?という話になる。
つまり、オブジェクトとそのデータベースの格納永続化の過程の間には、本質的な相性の悪さがあるのだ。これを電気回路のアナロジーから「インピーダンス・ミスマッチ」と呼ぶことが多い。


Java hibernate


世の中にはデータベースを使うアプリは山ほどあるわけで、このインピーダンスミスマッチを解消するために色々な方法が提案されている。その一つが、オブジェクト関係マッピング(Object-Rerational Mapping O/RM ORM)を用いる手法だ。

ただ、ORM の発想そのものに違和感を覚えている人もいる。
[参考]『ORM は不快なアンチパターン


Java だと hibernate が有名で、今回のシステムにもこれが使われていたという次第です。
コーディング自体は難解な呪文を呼び出す感じではなく、テーブル(とそこに含まれるカラム)を意識してそれに合わせてクラス(と変数)をつくる感じです。
今回のコンバータープログラムでは、元のソースがあったため、それに基づいて必要な部分だけアレンジしてプログラミングしました。
で、ばっちり動きました。

[参考] hibernate に関しては、まず、世に出回っている資料が古い。本家 web サイトで情報収集した方がいいでしょう。たぶん、日本の古い情報にひきずられてでしょうが、あまり有益な情報は国内サイトでは得られませんでした。
それが原因か間違った解釈している人も多かったです。どっかでちらっと見たのですが「●×は hibernate を理解していない。DBからdumpしたものに hibernate をかけているだけだろう」みたいな支離滅裂なことを書いている人がいました。私が見たところその●xさんの方が正しく hibernate を使ってましたが。『Java 奉行』ですね (^^;)

C++ の場合

(書き足す予定)

サーバサイドJavaScript 系


Prisma の評判が良いようです。





AkibaChanReiwa


コメント