JJUG-CCC 日本Javaユーザーズグループクロスコミュニティカンファレンス 2018/12 登壇資料です。Read less
![ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ](https://cdn-ak-scissors.b.st-hatena.com/image/square/f7f9cf0c25336e04bff16048125e4d3e1b41ecfa/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fjjug-ccc2018fall-ccca1-o-r-mapper-and-dbmigrationtools-181215020402-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
Zend Framework勉強会#2 はGMOペパボ株式会社様の協力もあって、盛況でしたが、どうもZend_Dbに関して誤解があるような気がしているので(私も含めて)一通り確認してみようというフォローアップ記事です。 Zend Frameworkで対応しているモデル構成は、ドメインモデル+サービスレイヤーで直接的にはデータマッパーです。 CakePHPでは標準ではActiveRecordを採用していると思いますが、ここがCakePHPやsymfonyで学習してきた人が一番最初に戸惑う部分ではないかと思います。また、初学者がデータマッパーの意義をいきなり理解するのは難しいような気もします。 要は、多くの初心者が“モデルって、DBテーブルのことだよね”と考えてしまうのはよくない、と。結果的にコントローラがふくれあがり、UnitTestで影響が出てしまう、という話になっています。 - Cake
先月、新しいEntity Framework 4『コード・ファースト』開発オプションについてブログ投稿しました。EF『コード・ファースト』はデータを扱うための非常に優しい『コード中心』の開発ワークフローを可能にします。それにより以下のことが可能です。 デザイナを開いたりXMLマッピングファイルを定義したりすることなくデータが扱える ベース・クラスなしのプレーン・オールド・クラスを書くだけでモデル・オブジェクトを定義 明示的な設定をすることなく、データベースの永続化が可能な設定に勝る規約を使用 初回のブログ投稿で、EF『コード・ファースト』を紹介し、新しいデータベースを作成する時のデフォルトのEF4マッピング規約の使用方法をお見せしました。これらのデフォルトの規約は新しいアプリケーションに非常にうまく動作し、データベースへまたデータベースからクラスをマップするのに明示的に何かを構成しなくても
O/Rマッパー(ORM)かSQLか、という話が一部で盛り上がっていたので追いかけていました。 ORMについては以下のような見方をすることもできます。 「最初からあらゆる要素をオブジェクト指向で設計、実装すると決めた新規開発システムならばORMは有力な採用候補」 「非オブジェクト指向で設計、実装されたシステムにORMはあまり向いていない」 なので、すでに存在しているデータベース上で別の新しいシステムを構築するような場合は、ORMはあまり向いていないと思います。 O/Rマッピングツールに対する誤解をときたい - ITは芸術だ 引用したエントリはとても冷静にORMの利点を説明している良記事です。 この記事の内容には全面的に賛同しつつ、自分としてはSQL側からちょっと書いてみたいと思います。 以前、試しにクエリに付随するロジックをできるだけDMBS側(SQL)に寄せるようにして開発したことがありま
S2Dao.PHP5 概要 Java版S2DaoをPHP5に移植します。 S2Dao.PHP5 を利用するには最新版の S2Container.PHP5 が必要です。 リンク リポジトリ SVNリポジトリブラウザ トラッキング ダウンロード labs.s2php5.jp S2Dao.PHP5の特徴 S2Dao.PHP5は以下のような特徴を持ちます。 XML不要のO/Rマッピング S2Dao.PHP5では、データベースとPHP5クラスのマッピング情報にXMLを使用することなくO/Rマッピングすることが可能です。 SQLの自動生成 S2Dao.PHP5では、メソッドを命名規則に合わせることで、SQL文の記述が不要で自動的にSQL文を生成させることができます。 2Way SQL S2Dao.PHP5では、自動生成されたSQLの他に任意のSQLを実行することもできます。そのSQLはファイルに記述す
PDOでPrepareすれば殆ど作業が簡単に片付くが、やっぱりO/R mapperで楽をしたいなと思った。 いろいろ見てみると、 PropelのPDO版 Propel 1.3 SeasarのPHP版 S2Container.PHP5 CybozuのCBL CBL ActiveRecord Zend FrameWork Zend_Db が見つかった。Zend_DbはAPIが固定されてきたけど。arrayがいっぱい出てきて好きじゃない。SeasarはJavaの移植なので設定XMLとか面倒くさそうなのでパス。Propelは普段使ってるからよく知ってる。CybozuのCBLを試してみた。 使い方は、日本語ドキュメントがシンプルでわかりやすい。 http://31tools.com/cbl_activerecord/README.ja.utf8.html ただ、PostgreSqlの7.xで使うと
hibernateを利用してはいけない5つのシチュエーション(リンクは記事最下部の関連コンテンツにあります)では、 多数の方からそれはおかしいという指摘をいただきました。 特にkoichikさんは私の代わりに様々な検証を行ってくださり、そのおかげでやっとhibernateの癖 のいくつか知ることが出来ました(いや、ドキュメントには書いてあるんでしょうが)。 納得がいかないと頑張っていたシチュエーション4(同一Transaction内でセレクトした全てのオブジェクトをTransactionコミット時に勝手に更新)についてもhibernateの使用方法、癖を理解していなかったために陥った誤った認識でした(余裕が出来てコードを見たとたんにへこんだ)。 hibernateの仕様を理解して使用する分にはhibrenateに問題はありません。 #ただ癖がいろいろあることは確かで
いまさら強調するまでもなく、今日、データベースといえば、リレーショナル・データベース(以降、RDB)が主流であることは間違いない。しかし、C#やJava、C++といったオブジェクト指向言語の台頭によって、RDBが常に最適解とはいえない状況が発生しつつある。というのも、RDBとオブジェクト指向言語で扱うオブジェクトとは、そもそもの構造が異なるためだ。 オブジェクト指向に基づいてデータベース・アクセスを行おうとすれば、例えばINSERT命令を発行するには、データベースに格納すべき値をオブジェクトから取り出し、INSERT命令を動的に組み立てる必要がある(1つのオブジェクトをテーブル内の1レコードに対応させる場合)。逆に、SELECT命令でデータベースから取り出した結果セットは、オブジェクトを生成してから、結果セット内の各値を対応するオブジェクトのプロパティに代入しなければならない。 このような
前回では、O/RマッピングおよびO/Rマッピング・ツールの概要について解説し、.NET向けの代表的なO/Rマッピング・ツールである「NHibernate」を紹介した。 O/Rマッピング・ツールを使えば、(C#やVB.NETの)オブジェクトとデータベース上のテーブルとをマッピングできる。これによって、アプリケーションからはオブジェクトのプロパティにアクセスするだけで、直感的にテーブル上の各フィールドにアクセスすることが可能になるというわけだ。 前回の冒頭で示しているように、.NET環境で利用可能なO/Rマッピング・ツールはすでにいくつもが提供されている。今回は、NHibernateと並び.NET向けの代表的なO/Rマッピング・ツールである「iBATIS.NET」について解説しながら、実際にそれを利用したASP.NETのWebアプリケーションを作成していく。 前回で見たように、NHiberna
世の中はhibernate礼賛のサイトが沢山あります。 O/Rの中ではバラ色の世界が広がっているように錯覚してしまいます。 しかし実際にマジに使用すると、ひどい目に遭う局面が沢山あります。 -- 2007/01/16 追記 ここに情報を探しにきているようなひとは、悪いこと言いませんのでhibernateの採用を中止しなさい。 利用しだしていても、今引き返した方が工数が減ります。間違いない。1年以上経った今でも、hibernateのオニモツ加減には慣れません。 -- 2007/01/16 追記ここまで -- ここから追記 下記(特にシチュエーション4)について、再検証を行う必要がありそうです。 必ず、koichikさんのブログを併読してください。 http://d.hatena.ne.jp/koichik/20051002#1128268814 http
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く